Есть некая строка поиск в которой клиент вводит к примеру ФИО
При каждом нажатии на клавиатуре срабатывает Ajax запрос который отправляет данные на обработчик, обработчик в свою очередь отдает от ответ таким образом:
$data = array(
'lead_details' => $output
);
echo json_encode($data);
В $output содержатся уже готовые данные для вывода.
Принимаю их просто вот так на стороне клиента:
success: function(data) {
$('.leed_all_block').html(data.lead_details);
}
Все работает НО
Если данные много порядка 150 строк, то при каждом клике в инпуте поиска на стороне клиента начинает дико зависать сайт, так как он не успевает это все так быстро обрабатывать и выводить
Может быть, не нужно выводить результаты поиска при каждом нажатии на клавишу? Просто выводить результаты поиска один раз, когда пользователь введет всю поисковую фразу и нажмет кнопку "Поиск".
Я например начинаю "живой поиск" делать не с первого введённого символа, а с третьего или с пятого. Это существенно сокращает выборку, и всё работает бодренько. Ведь стоит не забывать, что подсказки имеют смысл, когда их выводится 5-10 вариантов, не больше. Если предлагается 100500 подсказок, в них нет никакого смысла.
Кроме того, если пользователь не стирает символы, в продолжает ввод, то это значит, что ничего нового БД вам уже не пришлёт, и можно уточнять выборку из того, что принёс прошлый аякс, на стороне клиента.
Mikhail_mk, во первых начните обработку хотя бы с 3 символа в поле. Т.е. когда юзер напишет хотя бы "мос" то уже получит Москва. А 1 символ это уже издевательство, чтобы юзер сижел смотрел что у вас в базе все таки есть. Это первое. Дальше, делайте это через setTimeout и в "фоне" чтобы юзер клацал а обработчик каждую секунду/две за ним ходил смотрел (и будет смотреть то, что уже наклацано, а не каждый стук юзера)
Интересное решение, часть проблемы возможно и закроет
НО
К примеру база из 10000 клиентов
В поиск ставим частую букву "А" так как поиск ищет не по точному совпадению, то будет очень много результатов и опять зависает, надо именно как то оптимизировать сам запрос и ответ я так думаю, но вот как не пойму пока что
Антон, никто не будет, напечатав "А" скролить результаты. Надо давать подсказки только после нескольких символов. Или как вариант, если php видит, что выборка слишком велика (ибо она бесполезна и ничего не подсказывает), то не возвращать ничего (ну или служебное сообщение). А если она порядка 10, то тогда отправлять.