Две недели назад на сайте 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 работает в реальном режиме времени. С вводом каждой новой буквы список вариантов обновляется. Скрипт технически восхитителен, как минимум, по двум причинам:
- Скорость. Даже при быстрой печати список вариантов поразительно быстро обновляется после каждого нажатия клавиши. А ведь при этом производится запрос к базе данных и, какая никакая, сортировка на стороне сервера.
- Интерфейс. Выпадающее меню идеально соответствует ширине поисковой строки, самый подходящий вариант выделен в строке поиска, осуществляется навигация по меню вверх и вниз.
После анализа кода скрипта выявляются и другие особенности: отличная поддержка кэша, так что после нажатия Backspace скрипт не посылает новый запрос на сервер; динамическая подстройка скорости обновления в зависимости от пинга на Google. Для работы с "быстрыми пользователями" на плохом коннекте предназначена специальная функция setTimeout, которая при быстрой печати обновляет результаты не после каждого нажатия, а через два или три (при быстрой печати).
Вот другие особенности, которые выяснились после изучения кода скрипта:
- Автозаполнение можно отключить, если добавить в адресную строку параметр autocomplete="off".
- Объект XMLHTTP / XMLHttpRequest служит для коммуникации с сервером Google, отправки запросов и получения данных без обновления страницы.
- Отлично реализовано слежение за нажатиями клавиш и положением курсора мыши.
- Действительно понятно, как можно выделить текст в строке запроса средствами Javascript.
Выполнение скрипта вызывается из HTML-страницы командой
InstallAC()...
Интересно, что при этом осуществляется проверка:
var Jb="zh-CN|zh-TW|ja|ko|vi|"
То есть система пытается определить пользователей из Японии, Кореи и Китая, что может говорить о поддержке не только английского, но и азиатских языков.
Функция InstallAC вызывает другую (installACPart2), которая проверяет поддержку браузером XMLHttp и создает ресурс "_completeDiv", куда и направляется контент, полученный с сервера.
Полный анализ скрипта Google Suggest можно изучить в блоге Криса Джастуса. Там действительно очень много интересного...
Анатолий АЛИЗАР
Горячие темы