@PlatinumArcade

Оптимизация быстрого поиска по keydown

Нужно добавить на сайт быстрый поиск по типу, как вконтакте.



По мере ввода слова — в div-е под полем ввода будут появляться результаты поиска. Поиск будет по новостям (около 15-20 тыс. названий), тоже у каждой новости есть небольшой логотип. Название будет ссылкой на саму новость.

Но при каждом вводе буквы делать запрос в БД больно «дорогое» удовольствие. Как-то можно это оптимизировать? Из вариантов пока:

1. Делать 1 запрос на извлечение всех названий в js-переменную и искать потом уже локально, средствами js. Но это надо будет каждый раз дёргать все 20к названий.
2. Может как-то в память сервера загнать кэш со всем названиями, логотипами и брать оттуда с пом. ajax?
  • Вопрос задан
  • 2541 просмотр
Пригласить эксперта
Ответы на вопрос 6
@Demetros
Если у вас поиск только по первой части названия новости, то создайте в базе memory-таблицу с индексом по названию и заносите в неё название новости и логотип. Базы данных как бы для того и сделаны, чтобы в них искать, поиск по индексированной таблице в памяти — это не очень дорогое удовольствие.
Ответ написан
Комментировать
molodoy
@molodoy
нет необходимости дергать БД на каждую букву. сделайте задержку, если нет ввода в теч 200-400мс (подберете сами как удобнее будет), то стартуйте поиск.
В таком случае число запросов заметно сократится. и нет смысла на самом деле искать, пока пользователь набирает. как только он сделал небольшую паузу в наборе — можно вывести ему подсказки.
Ответ написан
Используйте кеш, и 1й совет. Иного способа просто нет. Так же рекомендую сделать что бы поиск начинался с более 2-3х символов, дабы сократить кол-во результатов. Да и лимит не забывайте.
Ответ написан
Комментировать
taliban
@taliban
php программист
При каждом нажатии сперва отменяйте предидущий запрос, человек, когда ищет нечто определенное, вводит буквы быстрей чем отрабатывает запрос.
Ответ написан
Комментировать
GolDenOne
@GolDenOne
Паузу я бы сделал не менее 500 миллисекунд и лимит на 10 записей. Так нагрузка на БД будет меньше.
Ответ написан
opium
@opium
Просто люблю качественно работать
Делайте поиск на сфинксе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы