Cette bibliothèque permet un index de recherche complet dans votre navigateur et est utilisée dans Runbox 7 pour rechercher des e-mails sans interagir avec un serveur.
Il est basé sur Xapian qui est une bibliothèque de moteur de recherche open source écrite en C. En compilant Xapian avec le compilateur Emscripten, nous pouvons créer cette bibliothèque pour WebAssembly qui s'exécute dans les navigateurs modernes.
En ciblant WebAssembly, nous pouvons également utiliser le même code sur le serveur avec nodejs. Nous n'avons pas besoin de créer des versions distinctes pour différents systèmes d'exploitation. De plus, comme il s'exécute dans le bac à sable Javascript, nous pouvons bénéficier des fonctionnalités de sécurité qui l'accompagnent. Nous pensons que cette version est à la fois plus sûre et plus portable que les versions natives, sans perdre grand-chose en termes de performances. Nous avons plutôt constaté un gain en productivité de développement et même en performances grâce à une intégration aussi étroite avec le runtime Javascript fourni avec WebAssembly, par rapport à l'utilisation de liaisons de langage de script traditionnelles aux bibliothèques C.
Avoir l'index de recherche dans le navigateur ne fonctionnerait bien sûr pas pour un moteur de recherche pour l'ensemble du Web, mais pour un compte de messagerie, il existe une quantité limitée de données où l'index de recherche pourrait tenir dans le moteur de stockage local du navigateur tel qu'IndexedDB et même dans mémoire lors de son utilisation.
Il y a plusieurs avantages à avoir un index de recherche dans le navigateur plutôt que sur le serveur. Tout d'abord c'est le gain de vitesse puisque vous n'avez pas l'aller-retour des requêtes et des résultats vers le serveur. Vous pouvez renvoyer instantanément des résultats de recherche complets au fur et à mesure que vous tapez, et vous pouvez offrir davantage de fonctionnalités en matière de tri et de comptage du nombre de résultats. Pour l'utilisateur, cela signifie que vous pouvez être plus efficace dans l'ajustement de votre requête puisque vous obtenez des résultats instantanés. Un autre avantage est qu’aucun serveur ne surveillera ce que vous recherchez, ce qui est bon pour la confidentialité. Vous pouvez également rechercher votre contenu hors ligne (sans connexion Internet). Si l'utilisateur possède même des compétences en codage, avoir un accès complet à l'index de recherche et aux bibliothèques pour interagir avec lui ouvre des possibilités de traitement personnalisé de l'index. Dans un scénario de courrier électronique, cela peut aller des recherches intelligentes à la surveillance et aux alertes.
Il existe néanmoins des cas où vous ne souhaitez pas télécharger l'index de recherche et souhaitez utiliser le serveur pour la recherche. Un scénario peut être celui de l'utilisation d'un appareil qui n'est pas le vôtre. Cibler WebAssembly permet de réutiliser le même code sur le serveur pour fournir les mêmes API que dans le navigateur.
Les applications Web modernes utilisent de plus en plus le stockage local du navigateur pour le cache, le stockage des paramètres, du contenu, etc. Cela nous donne de meilleures performances et même des capacités hors ligne, mais nécessite également une meilleure connaissance du navigateur et de l'appareil que nous utilisons. Lorsque vous n'utilisez pas votre propre appareil privé, vous devez utiliser la navigation privée afin que rien ne soit stocké sur cet appareil. Également pour vos appareils privés, vous devriez envisager d’utiliser un système d’exploitation proposant des systèmes de fichiers cryptés.
Ce projet dépend de https://github.com/xapian/xapian et du fait que vous l'avez construit en utilisant Emscripten comme écrit ici :
https://github.com/xapian/xapian/blob/master/xapian-core/emscripten/README.md
Afin de créer les binaires de l'assembly Web, vous devrez définir la variable d'environnement XAPIAN
sur l'emplacement du dossier xapian_core
de votre build Xapian emscripten.
Vous pouvez ensuite le construire en utilisant XAPIAN=xapian_core_location npm run build
Vous pouvez également consulter le fichier .travis.yml pour une procédure complète de construction et de test (qui est exécutée à chaque push).
npm run test