Методы, чтобы сделать автозаполнение на сайте более отзывчивым - PullRequest
1 голос
/ 09 марта 2009

На экране расширенного поиска моего сайта есть около 15 полей, для которых необходимо заполнить поле автозаполнения.
Все их содержимое зависит от значения друг друга (поэтому, если одно заполнено, содержимое другого будет меняться в зависимости от значения первого).
Большинство полей имеют огромное количество возможностей (не менее 1000 записей).

В настоящее время выполняется вызов ajax, если пользователь перестает печатать на полсекунды. Этот ajax-вызов делает быстрый вызов моего индекса Lucene и возвращает группу объектов JSon. Сам метод действительно быстрый, но соединение и передача данных слишком медленные.

Если я смотрю на другие сайты (скажем, в Facebook), их автозаполнение происходит мгновенно. Я полагаю, что они поместили возможные значения в свой HTML, чтобы им не приходилось совершать обходы. Но я боюсь, что с количеством данных, которые я обрабатываю, это не вариант.

Есть идеи?

Ответы [ 6 ]

5 голосов
/ 09 марта 2009
  1. Возврат только лучших результатов x.
  2. Получите некоторые тренды о том, что выбирают пользователи, и порядок, основанный на этом, предпочтительно автоматически.
  3. Кэшировать результаты для каждой комбинации URL и нажатия клавиш, так что вам не нужно туда и обратно если вы уже получили результат до этого.
  4. Поделитесь этим кешем со всеми автозаполнения, которые используют тот же URL и комбинация клавиш.
  5. Конечно, включить сжатие GZIP для JSON, и убедитесь, что вы устанавливаете свой заголовки кэша для кэширования для некоторых время. Время зависит от вашей ставки изменения автозаполнения ответа.
  6. Оптимизация JSON для отправки минимум Не отправлять вниз все, что вам не нужно.
4 голосов
/ 09 марта 2009

Возвращаете ли вы ВСЕ результаты для возможностей или просто топ-10 как объекты json.

Я заметил, что многие люди отправляют большое количество результатов обратно на экран, но затем показывают только первые несколько. Отправляя небольшое количество результатов, вы можете уменьшить объем передаваемых данных.

2 голосов
/ 09 марта 2009

В дополнение к ограничению набора результатов верхним набором X рассмотрите возможность включения кэширования в ответах на запросы AJAX (что означает использование GET и сохранение простого URL).

Удивительно, как часто пользователи возвращаются назад, а потом заканчивают перепечатывать один и тот же контент. Также, разрешив публичное и серверное кэширование, вы можете ускорить общее время обхода.

2 голосов
/ 09 марта 2009

Вернуть результаты «X», а не весь список, чтобы сократить количество вариантов? Вы также можете попробовать добавить некоторые тренды, чтобы отслеживать, что пользователи выбирают из списка, чтобы вы могли сделать верхний «Х» наиболее используемым / наиболее релевантным. Вы всегда можете сначала вернуть свой наиболее релевантный список, а затем вернуть полный список, если они все еще испытывают трудности.

1 голос
/ 09 марта 2009
  • Кэшировать результаты в System.Web.Cache
  • Использовать кеш Lucene
  • Используйте GET not POST, поскольку IE кеширует это
  • Получите только часть результатов (10, как предлагают люди)
  • Попробуйте приличный сторонний виджет автозаполнения, такой как YUI one
0 голосов
/ 09 марта 2009

Возвращение топ-N записей является хорошим подходом. Но если вы хотите / должны вернуть все данных, я бы попытался ограничить отправляемые данные и сам объект JSON.

Например:

«Эта компания здесь с длинным именем» становится «Эта компания здесь ...» (вы снова ставите точки на стороне клиента имени - снова; передаете минимум данных).

А что касается объекта JSON:

{n: "This Here Company", v: "1"}

... Где «n» будет именем, а «v» будет значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...