Как устроен Google Suggest

Две недели назад на сайте Google началось бета-тестирование новой функции "предсказания запросов" Google Suggest (labs.google.com/suggest), без сомнения, одной из самых отличных разработок, которые появились на поисковых сайтах в последнее время.

Вполне возможно, что в ближайшем будущем функция будет встроена в основной движок Google. Скрипт выполняет автозаполнение строки поискового запроса на основе общей статистики самых популярных запросов. Это очень удобно и напоминает функцию автозаполнения в адресной строке браузера. Но при этом демонстрируется примерное количество документов, которые соответствуют каждому предполагаемому запросу. Для работы системы необходимо разрешить в браузере выполнение Javascript и прием файлов cookie.

За время, прошедшее с момента начала тестирования Google Suggest, независимые разработчики подробно разобрали, как работает этот скрипт. Наиболее полный анализ опубликовал (serversideguy.blogspot.com/2004/12/google-suggest-dissected.html) в своем блоге программист Крис Джастус (Chris Justus).

Оригинальный скрипт (www.google.com/ac.js) Google Suggest сжат, насколько это только возможно, и имеет размер ровно 11.360 байт. Поэтому для анализа нужно первым делом его "расшифровать". В расшифрованном (www.fastbugtrack.com/misc/google/acIndent.js), а тем более, в снабженном комментариями (www.fastbugtrack.com/misc/google/ac.js) виде каждый программист уже может изучить исходный код и получить детальное представление, как он работает.

Как говорит Крис Джастус, это "самая крутая штука, которую я видел с тех пор, как обнаружил SOAP-клиент с поддержкой WSDL в браузере Mozilla".

 

Технология предсказания запросов Google Suggest работает в реальном режиме времени. С вводом каждой новой буквы список вариантов обновляется. Скрипт технически восхитителен, как минимум, по двум причинам:

  1. Скорость. Даже при быстрой печати список вариантов поразительно быстро обновляется после каждого нажатия клавиши. А ведь при этом производится запрос к базе данных и, какая никакая, сортировка на стороне сервера.
  2. Интерфейс. Выпадающее меню идеально соответствует ширине поисковой строки, самый подходящий вариант выделен в строке поиска, осуществляется навигация по меню вверх и вниз.

После анализа кода скрипта выявляются и другие особенности: отличная поддержка кэша, так что после нажатия Backspace скрипт не посылает новый запрос на сервер; динамическая подстройка скорости обновления в зависимости от пинга на Google. Для работы с "быстрыми пользователями" на плохом коннекте предназначена специальная функция setTimeout, которая при быстрой печати обновляет результаты не после каждого нажатия, а через два или три (при быстрой печати).

Вот другие особенности, которые выяснились после изучения кода скрипта:

  1. Автозаполнение можно отключить, если добавить в адресную строку параметр autocomplete="off".
  2. Объект XMLHTTP / XMLHttpRequest служит для коммуникации с сервером Google, отправки запросов и получения данных без обновления страницы.
  3. Отлично реализовано слежение за нажатиями клавиш и положением курсора мыши.
  4. Действительно понятно, как можно выделить текст в строке запроса средствами Javascript.

Выполнение скрипта вызывается из HTML-страницы командой

InstallAC()...

Интересно, что при этом осуществляется проверка:

var Jb="zh-CN|zh-TW|ja|ko|vi|"

То есть система пытается определить пользователей из Японии, Кореи и Китая, что может говорить о поддержке не только английского, но и азиатских языков.

Функция InstallAC вызывает другую (installACPart2), которая проверяет поддержку браузером XMLHttp и создает ресурс "_completeDiv", куда и направляется контент, полученный с сервера.

Полный анализ скрипта Google Suggest можно изучить в блоге Криса Джастуса. Там действительно очень много интересного...

Анатолий АЛИЗАР

Версия для печатиВерсия для печати

Номер: 

51 за 2004 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!