Эта библиотека обеспечивает полнофункциональный поисковый индекс в вашем браузере и используется в Runbox 7 для поиска электронных писем без взаимодействия с сервером.
Он основан на Xapian, библиотеке поисковой системы с открытым исходным кодом, написанной на C. Скомпилировав Xapian с помощью компилятора Emscripten, мы можем создать эту библиотеку для WebAssembly, которая работает в современных браузерах.
Ориентируясь на WebAssembly, мы также можем использовать тот же код на сервере с nodejs. Нам не нужно создавать отдельные сборки для разных операционных систем. Кроме того, поскольку он работает внутри изолированной программной среды Javascript, мы можем извлечь выгоду из встроенных в него функций безопасности. Мы считаем, что это безопаснее и портативнее, чем собственные сборки, без большой потери в производительности. Скорее, мы наблюдаем повышение производительности и даже производительности разработки за счет такой тесной интеграции со средой выполнения Javascript, поставляемой с WebAssembly, по сравнению с использованием традиционных привязок языка сценариев к библиотекам C.
Наличие поискового индекса в браузере, конечно, не будет работать для поисковой системы во всей сети, но для учетной записи электронной почты существует ограниченный объем данных, где поисковый индекс может поместиться в локальной системе хранения браузера, такой как IndexedDB и даже в память при использовании.
Наличие индекса поиска в браузере, а не на сервере, дает несколько преимуществ. Прежде всего, это выигрыш в скорости, поскольку у вас нет необходимости передавать запросы и результаты на сервер. Вы можете мгновенно возвращать полные результаты поиска по мере ввода, а также предлагать дополнительные функции по сортировке и подсчету количества совпадений. Для пользователя это означает, что вы можете более эффективно корректировать свой запрос, поскольку получаете мгновенные результаты. Еще одним преимуществом является то, что ни один сервер не будет отслеживать то, что вы ищете, что хорошо для конфиденциальности. Вы также можете искать свой контент в автономном режиме (без подключения к Интернету). Если у пользователя даже есть навыки программирования, полный доступ к поисковому индексу и библиотекам для взаимодействия с ним открывает возможности для индивидуальной обработки индекса. В сценарии электронной почты это может быть все: от интеллектуального поиска до наблюдения и оповещений.
Тем не менее, бывают случаи, когда вы не хотите загружать поисковый индекс и хотите использовать сервер для поиска. Одним из сценариев может быть использование чужого устройства. Ориентация на WebAssembly позволяет повторно использовать один и тот же код на сервере для предоставления тех же API, что и в браузере.
Современные веб-приложения все чаще используют локальное хранилище браузера для кэша, хранения настроек, контента и многого другого. Это дает нам лучшую производительность и даже возможности работы в автономном режиме, но также требует большей осведомленности о том, какой браузер и устройство мы используем. Если вы не используете свое личное устройство, вам следует использовать приватный просмотр, чтобы на этом устройстве ничего не сохранялось. Также для ваших личных устройств вам следует рассмотреть возможность использования операционной системы с зашифрованными файловыми системами.
Этот проект зависит от https://github.com/xapian/xapian и от того, что вы создали его с помощью Emscripten, как написано здесь:
https://github.com/xapian/xapian/blob/master/xapian-core/emscripten/README.md
Чтобы создать двоичные файлы веб-сборки, вам необходимо установить переменную среды XAPIAN
в местоположение папки xapian_core
вашей сборки Xapian emscripten.
Затем вы можете собрать его, используя XAPIAN=xapian_core_location npm run build
Вы также можете просмотреть файл .travis.yml для полной процедуры сборки и тестирования (которая запускается при каждом нажатии).
npm run test