Pagefind

Поиск на сайте — это хорошо и удобно. На Known у меня был, потом, с переходом на статику, пару месяцев не было, но после перехода на LoveIt появился снова — в LoveIt встроенные шаблоны для работы с Algolia и Lunr.js, и второй из опций я воспользовался. Некоторое время это работало, но потом на сайт добавились посты из архивов Google+ и ЖЖ, и страниц стало слишком много.

Фактически, для Lunr.js генерировался отдельный файл со всем текстовым содержимым сайта, и этот файл должен был быть загружен браузером, чтобы скрипт мог в нём что-то искать. Файл стал слишком большим, и стало проще открыть Google и поискать по сайту там, чем дожидаться загрузки «встроенного» поиска. Кончилось тем, что в мае этого года я поиск отключил вовсе — им всё равно было невозможно пользоваться.

На прошлой неделе на Lobste.rs проскочила новость о выходе версии 1.0 нового замечательного механизма поиска, «заточенного» как раз под статические сайты — Pagefind. Посмотрел-почитал — интересно! «Отдельно-стоящий» бинарник, которому можно скормить сгенерированный сайт; он создаёт индекс и сохраняет вместе с WASM-кодом в отдельной поддиректории, откуда потом можно дёргать этот код из JavaScript в браузере. Индекс, вроде как, сделан по-умному, не одним большим файлом, а потому объём передаваемых и обрабатываемых данных при поиске получается совсем небольшим.

логотип Pagefind

Вчера, уже на ночь глядя, как домочадцы спать легли, решил попробовать. Сгенерировалась поддиректория — индекс, WASM, прочий всякий JS/CSS для «родного» UI — в общей сложности больше 20 мегабайт. Стал запускать — работает. Быстро работает. И трафик, судя по консоли браузера, на один поисковый запрос — килобайт сто, это с загрузкой WASM считая. А сама индексация довольно гибко настраивается добавлением пары тегов на страницы в нужные места. Красота! Надо брать…

В общем, поиск на сайте у меня снова есть! Правда, с моим (не)знанием JavaScript возиться, чтобы подружить Pagefind с интерфейсом LoveIt, пришлось часа два, и лёг я изрядно за полночь, но оно определённо того стоило. Да и в JavaScript подразобрался — поди плохо!..