Как сделать ввод в input с подсказкой на ajax

Для кэширования можно использовать memcache.
Т.е. проверяем есть ли подстрока поиска в базе, например "мос", если нет то делаем select `id`,`name` where `name` like 'мос%', делаем объединение всех id в строку с разделителем запятая, например "1,2,5,18,10", записываем в memcache ["мос"] = "1,2,5,18,10"
и потом при следующем запросе подстроки начинающейся с "мос" берем эту запись и запрос будет уже select `id`,`name` where `id` in ("1,2,5,18,10") and `name` like 'моск%' т.е. запрос будет уже по двум индексам идти, что значительно быстрее.
 
Ну, 3 секунды - это многовато. Полторы-две - в самый раз.
Алгоритм для минимальной нагрузки на сервер примерно такой:
Ждём ввода как минимум 2-х символов (есть ведь 2-значные населённые пункты).
При каждом изменении в поле ввода обнуляем счётчик времени.
Как только счёт чик достигнет заданного интервала, скажем, 2 секунды - отсылаем запрос к серверу.
Сервер по индексированному полю возвращает ответ TOP 20 записей.

Можно сделать ещё одну оптимизацию: если записей вернулось меньше 20, то при последующем добавлении букв в поле ввода не посылать запрос к серверу, а фильтровать из уже полученных результатов.
Правда, тут нужна обработка, что было именно добавление символов, а не изменение тех, по которым был последний поисковый запрос.
 
Назад
Сверху