Прототип поискового движка на JavaScript протестировали на миллионе синтетических записей. Сравнение стратегий merge и probe показало, что при поиске по редкому и частому слову несжатый probe работает быстрее (0,033 мс), чем сжатый (0,066 мс). При двух частых словах обычный merge оказался эффективнее (7,45 мс), чем probe (14,74 мс).
Выявлена проблема с памятью: использование метода subarray удерживало в оперативной памяти весь файл размером 137 МиБ, хотя индекс занимал 9 МиБ. Явное копирование данных в Uint8Array позволило сократить потребление памяти ArrayBuffer с 138,57 до 10,59 МиБ. Сжатый индекс занимает 10,57 МиБ против 23,65 МиБ у несжатого.
Для работы с правками используется карта изменений. Обновление 100 идентификаторов занимает 0,65 мс, а 10 000 — 47,77 мс. Компактация базы после 10 000 изменений требует в среднем 9,72 секунды. Система использует блочное сжатие по 128 элементов, что позволяет искать данные в сжатом потоке без полной распаковки.
Измерения проводились в Node.js 24.15 на системе с процессором Core Ultra 7 155H и 15,5 ГиБ оперативной памяти. В браузере демо-версия работает с 32 772 реальными товарами. Полный размер файла составляет 136,80 МиБ, из которых 91% приходится на JSON-карточки товаров, что делает дальнейшее сжатие индексов малоэффективным.




