Esta biblioteca permite um índice de pesquisa completo em seu navegador e é usada no Runbox 7 para pesquisar e-mails sem interagir com um servidor.
É baseado no Xapian, que é uma biblioteca de mecanismo de busca de código aberto escrita em C. Ao compilar o Xapian com o compilador Emscripten, somos capazes de construir esta biblioteca para WebAssembly que roda em navegadores modernos.
Ao direcionar o WebAssembly, também podemos usar o mesmo código no servidor com nodejs. Não precisamos criar compilações separadas para sistemas operacionais diferentes. Além disso, como ele é executado dentro da sandbox Javascript, podemos nos beneficiar dos recursos de segurança que o acompanham. Acreditamos que isso é mais seguro e portátil do que as compilações nativas, sem perder muito no que diz respeito ao desempenho. Em vez disso, vimos ganho na produtividade do desenvolvimento e até mesmo no desempenho por meio de uma integração tão estreita com o tempo de execução Javascript que vem com o WebAssembly, em comparação com o uso de ligações de linguagem de script tradicionais para bibliotecas C.
Ter o índice de pesquisa no navegador obviamente não funcionaria para um mecanismo de pesquisa para toda a web, mas para uma conta de e-mail há uma quantidade limitada de dados onde o índice de pesquisa poderia caber no mecanismo de armazenamento local do navegador, como IndexedDB e até mesmo em memória quando em uso.
Existem vários benefícios em ter um índice de pesquisa no navegador e não no servidor. Primeiro de tudo é o ganho de velocidade já que você não tem o trajeto de consulta e resultados até o servidor. Você pode retornar resultados de pesquisa completos instantaneamente enquanto digita e pode oferecer mais recursos quando se trata de classificar e contar o número de resultados. Para o usuário, isso significa que você pode ser mais eficiente no ajuste de sua consulta, já que obtém resultados instantâneos. Outro benefício é que nenhum servidor monitorará o que você está pesquisando, o que é bom para a privacidade. Você também pode pesquisar seu conteúdo offline (sem conexão com a internet). Se o usuário tiver habilidades de codificação, ter acesso total ao índice de pesquisa e às bibliotecas para interagir com ele abre possibilidades de processamento personalizado do índice. Em um cenário de e-mail, isso pode incluir tudo, desde pesquisas inteligentes até vigilância e alertas.
Ainda há casos em que você não deseja baixar o searchindex e deseja usar o servidor para pesquisa. Um cenário pode ser o uso de um dispositivo que não é o seu. O direcionamento ao WebAssembly torna possível reutilizar o mesmo código no servidor para fornecer as mesmas APIs do navegador.
Os aplicativos da web modernos usam cada vez mais o armazenamento local do navegador para cache, armazenamento de configurações, conteúdo e muito mais. Isso nos proporciona melhor desempenho e até recursos off-line, mas também exige mais conhecimento sobre qual navegador e dispositivo usamos. Quando não estiver usando seu próprio dispositivo privado, você deve usar a navegação privada para que nada seja armazenado nesse dispositivo. Também para seus dispositivos privados, você deve considerar o uso de um sistema operacional que ofereça sistemas de arquivos criptografados.
Este projeto depende de https://github.com/xapian/xapian e que você o construiu usando Emscripten conforme escrito aqui:
https://github.com/xapian/xapian/blob/master/xapian-core/emscripten/README.md
Para construir os binários do web assembly, você terá que definir a variável de ambiente XAPIAN
para o local da pasta xapian_core
de sua construção do emscripten Xapian.
Você pode então construí-lo usando XAPIAN=xapian_core_location npm run build
Você também pode dar uma olhada no arquivo .travis.yml para obter um procedimento completo de construção e teste (que é executado a cada push).
npm run test