最近看到Brave浏览器也赶上了用Rust编程语言编写或重写其组件的趋势。它的团队宣布他们已经用Rust重新实现了之前用C++编写的广告拦截器。因此,广告拦截器现在比当前引擎快69倍。为什么?新的广告拦截器实现可以编译为本机代码并在本机浏览器内核中运行。也可以将其打包在一个独立的Node.js模块中。这个重新实现得到了我的确认,可以在Brave的Dev频道和Nightly频道上找到。这种新的广告拦截算法是如何工作的?之前的广告拦截算法是基于大多数请求都被无阻塞地通过的观察。它使用布隆过滤器数据结构来跟踪可能匹配的请求片段并排除不匹配的请求。新实施基于uBlockOrigin和Ghostery的广告拦截方法,该方法针对基于URL的添加拦截规则匹配和针对各种规则优化的规则评估是特定于标记化的。这种新算法之所以更快,是因为它可以快速消除所有可能与搜索请求不匹配的规则。“为了以加快过滤器匹配的方式组织过滤器,我们观察到过滤器中包含的任何字母数字(字母和数字)子字符串也必须包含在任何匹配的URL中,”该团队解释说。这些子字符串都散列为一个数字,从而产生许多标记。当以相同方式标记URL时,标记使匹配更容易和更快。该团队进一步写道:“尽管根据散列算法的性质,多个不同的字符串可以散列为相同的数字(散列冲突),但我们仍然使用它们将规则评估限制为尽可能匹配的规则。”如果规则有一个特定的主机名,它也会被标记化。如果规则包含单个域选项,则整个域将被散列为另一个标记。重新实现提高性能为了进行性能评估,该团队使用了GhosteryAdBlockerPerformanceResearch发布的数据集,其中包括500个热门网站的242,945个请求。针对此数据集,新的广告拦截器使用不同的广告拦截规则列表进行测试,包括最大的列表:EasyList和EasyPrivacy的组合。该团队在adblock-rust0.1.21库上执行了所有基准测试。他们使用配备2.6GHzIntelCorei7CPU和32GBRAM的2018款MacBookPro笔记本电脑。这是此新广告拦截器显示的性能提升:与现有引擎相比,具有优化规则集的新算法平均快69倍。当结合使用EasyList和EasyPrivacy流行的过滤器列表进行测试时,它给出了“一流的性能,平均每个请求仅花费5.7微秒”。它已经支持大部分过滤规则语法,这超出了原始规范。这将使团队能够更好更快地处理Web兼容性问题。浏览器做了一些对广告拦截器有用的工作。这进一步减少了开销,从而实现了广告拦截器的最佳性能。选择合适的语言既经济又环保,在开始项目之前就规划好重要的部分,这样才能更高效地完成任务。
