Esta biblioteca permite un índice de búsqueda con todas las funciones en su navegador y se utiliza en Runbox 7 para buscar correos electrónicos sin interactuar con un servidor.
Está basado en Xapian, que es una biblioteca de motor de búsqueda de código abierto escrita en C. Al compilar Xapian con el compilador Emscripten, podemos crear esta biblioteca para WebAssembly que se ejecuta en navegadores modernos.
Al apuntar a WebAssembly, también podemos usar el mismo código en el servidor con nodejs. No necesitamos crear compilaciones separadas para diferentes sistemas operativos. Además, dado que se ejecuta dentro del entorno limitado de Javascript, podemos beneficiarnos de las funciones de seguridad que lo acompañan. Creemos que esto es más seguro y portátil que las compilaciones nativas, sin perder mucho en términos de rendimiento. Más bien, hemos visto una ganancia en la productividad del desarrollo e incluso en el rendimiento gracias a una integración tan estrecha con el tiempo de ejecución de Javascript que viene con WebAssembly, en comparación con el uso de enlaces de lenguaje de script tradicionales a bibliotecas C.
Tener el índice de búsqueda en el navegador, por supuesto, no funcionaría para un motor de búsqueda para toda la web, pero para una cuenta de correo electrónico hay una cantidad limitada de datos donde el índice de búsqueda podría caber en el motor de almacenamiento local del navegador, como IndexedDB, e incluso en memoria cuando está en uso.
Existen varias ventajas de tener un índice de búsqueda en el navegador en lugar de en el servidor. En primer lugar, es la ganancia en velocidad, ya que no tiene el viaje de ida y vuelta de la consulta y los resultados al servidor. Puede obtener resultados de búsqueda completos al instante a medida que escribe y puede ofrecer más funciones a la hora de ordenar y contar el número de visitas. Para el usuario, esto significa que puede ser más eficiente a la hora de ajustar su consulta, ya que obtiene resultados instantáneos. Otro beneficio es que ningún servidor controlará lo que estás buscando, lo cual es bueno para la privacidad. También puedes buscar tu contenido sin conexión (sin conexión a Internet). Si el usuario incluso tiene habilidades de codificación, tener acceso completo al índice de búsqueda y a las bibliotecas para interactuar con él abre posibilidades para el procesamiento personalizado del índice. En un escenario de correo electrónico, eso podría ser de todo, desde búsquedas inteligentes hasta vigilancia y alertas.
Aún así, hay casos en los que no desea descargar el índice de búsqueda y desea utilizar el servidor para realizar búsquedas. Un escenario podría ser el uso de un dispositivo que no es el suyo. Apuntar a WebAssembly hace posible reutilizar el mismo código en el servidor para proporcionar las mismas API que en el navegador.
Las aplicaciones web modernas utilizan cada vez más el almacenamiento local del navegador para caché, almacenamiento de configuraciones, contenido y más. Esto nos brinda un mejor rendimiento e incluso capacidades fuera de línea, pero también requiere una mayor conciencia de qué navegador y dispositivo utilizamos. Cuando no utilice su propio dispositivo privado, debe utilizar la navegación privada para que no se almacene nada en ese dispositivo. También para sus dispositivos privados debería considerar el uso de un sistema operativo que ofrezca sistemas de archivos cifrados.
Este proyecto depende de https://github.com/xapian/xapian y de que lo hayas creado usando Emscripten como está escrito aquí:
https://github.com/xapian/xapian/blob/master/xapian-core/emscripten/README.md
Para construir los archivos binarios del ensamblaje web, deberá configurar la variable de entorno XAPIAN
en la ubicación de la carpeta xapian_core
de su compilación de Xapian emscripten.
Luego puedes compilarlo usando XAPIAN=xapian_core_location npm run build
También puede echar un vistazo al archivo .travis.yml para obtener un procedimiento completo de compilación y prueba (que se ejecuta en cada inserción).
npm run test