该库可在浏览器中启用全功能搜索索引,并在 Runbox 7 中用于搜索电子邮件,而无需与服务器交互。
它基于 Xapian,Xapian 是一个用 C 编写的开源搜索引擎库。通过使用 Emscripten 编译器编译 Xapian,我们能够为在现代浏览器中运行的 WebAssembly 构建这个库。
通过针对 WebAssembly,我们还可以在带有 Nodejs 的服务器上使用相同的代码。我们不需要为不同的操作系统创建单独的版本。此外,由于它在 Javascript 沙箱内运行,我们可以受益于它附带的安全功能。我们相信这比本机构建更安全、更便携,而且在性能方面不会损失太多。相反,与使用传统的脚本语言绑定到 C 库相比,通过与 WebAssembly 附带的 Javascript 运行时的紧密集成,我们看到了开发效率甚至性能的提高。
在浏览器中拥有搜索索引当然不适用于整个网络的搜索引擎,但对于电子邮件帐户来说,搜索索引可以容纳在浏览器本地存储引擎(例如 IndexedDB)中的数据量有限,甚至可以在使用时的内存。
在浏览器中而不是在服务器上建立搜索索引有几个好处。首先,它提高了速度,因为您无需将查询和结果发送到服务器。您可以在键入时立即返回完整的搜索结果,并且在排序和计算点击次数时可以提供更多功能。对于用户来说,这意味着您可以更有效地调整查询,因为您可以获得如此即时的结果。另一个好处是没有服务器会监视您正在搜索的内容,这有利于隐私。您还可以在离线时(没有互联网连接)搜索您的内容。如果用户甚至具有编码技能,则可以完全访问搜索索引和与其交互的库,从而为索引的自定义处理提供了可能性。在电子邮件场景中,这可能是从智能搜索到监视和警报的一切。
仍然存在您不想下载搜索索引,而想使用服务器进行搜索的情况。一种情况可能是使用不属于您自己的设备时。以 WebAssembly 为目标,可以在服务器上重用相同的代码,以提供与浏览器中相同的 API。
现代 Web 应用程序越来越多地使用浏览器本地存储来进行缓存、存储设置、内容等。这为我们提供了更好的性能甚至离线功能,但也需要更多地了解我们使用的浏览器和设备。当不使用自己的私人设备时,您应该使用私人浏览,以便该设备上不会存储任何内容。此外,对于您的私人设备,您应该考虑使用提供加密文件系统的操作系统。
该项目依赖于 https://github.com/xapian/xapian 并且您已使用 Emscripten 构建了它,如下所示:
https://github.com/xapian/xapian/blob/master/xapian-core/emscripten/README.md
为了构建 Web 程序集二进制文件,您必须将XAPIAN
环境变量设置为 Xapian emscripten 构建的xapian_core
文件夹的位置。
然后,您可以使用XAPIAN=xapian_core_location npm run build
来构建它
您还可以查看 .travis.yml 文件以获取完整的构建和测试过程(在每次推送时运行)。
npm run test