Rust编写广告拦截器的新引擎,为什么性能提高了69倍?

开发 前端
最近,看到Brave浏览器也已经赶上了用Rust编程语言编写或重写其组件的潮流。其团队宣布他们已在Rust中重新实现了其广告拦截器,该广告拦截器以前是用C ++编写的。结果,广告拦截器现在的速度是当前引擎的69倍。

最近,看到Brave浏览器也已经赶上了用Rust编程语言编写或重写其组件的潮流。其团队宣布他们已在Rust中重新实现了其广告拦截器,该广告拦截器以前是用C ++编写的。结果,广告拦截器现在的速度是当前引擎的69倍。

为什么呢?

新的广告拦截器实现可以编译为本机代码,并在本机浏览器内核中运行。也可以将其打包在独立的Node.js模块中。此重新实现的版本经过本人确认,可在Brave的 Dev频道和Nightly频道上找到。

 

[[316085]]

这种新的广告拦截算法如何工作?

先前的广告屏蔽算法是基于以下观察结果:大多数请求都经过了传递而没有阻塞。它使用Bloom过滤器数据结构来跟踪可能匹配的请求片段,并排除不匹配的请求。

新的实现基于uBlock Origin和Ghostery的ad-blocking方法,该方法是令牌化特定于针对URL的添加块规则匹配和针对各种规则进行了优化的规则评估。

使该新算法更快的原因在于,它可以快速消除所有可能不匹配搜索请求的规则。该团队解释说:“ 为了以加快过滤器匹配速度的方式组织过滤器,我们观察到过滤器中包含的任何字母数字(字母和数字)子字符串也必须包含在任何匹配的URL中。”

所有这些子字符串都散列为一个数字,从而产生许多令牌。当以相同的方式标记URL时,标记使匹配变得更加容易和快捷。该团队进一步写道:“ 即使是散列算法的本质,多个不同的字符串也可以散列为相同的数字(散列冲突),但我们仍使用它们将规则评估限制为尽可能匹配的规则。”如果规则具有特定的主机名,它也会被标记化。如果规则包含单个域选项,则整个域将作为另一个令牌散列。

 

[[316086]]

重新实施可提高性能

为了进行性能评估,团队使用了Ghostery广告拦截器性能研究发布的数据集,其中包括500个热门网站上的242,945个请求。针对此数据集,使用不同的广告阻止规则列表对新广告阻止程序进行了测试,其中包括最大的列表:EasyList和EasyPrivacy组合。

该团队在adblock-rust 0.1.21库中执行了所有基准测试。他们使用了具有2.6 GHz Intel Core i7 CPU和32GB RAM的2018年MacBook Pro笔记本电脑。

 

[[316087]]

以下是此新广告拦截器显示的性能提升:

  • 与现有引擎相比,具有优化规则集的新算法平均快69倍。
  • 当使用EasyList和EasyPrivacy的流行过滤器列表组合进行测试时,它给出了“一流的性能,每个请求平均仅花费5.7μs”。
  • 它已经支持大多数过滤规则语法,这些语法已超出原始规范。这将使团队能够更好,更快地处理Web兼容性问题。
  • 浏览器完成了一些对广告拦截者有用的工作。这样可以进一步减少开销,从而使广告拦截器具有最佳的性能。
  • 选择一门合适的语言节约又环保,而重要的是在开始项目之前就要把途中重要部分先做规划,才能更高效的完成任务。

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2020-06-11 08:05:47

nginx线程池数据

2020-06-12 14:44:06

线程池模式nginx

2024-05-11 09:24:15

性能Go团队

2021-12-08 12:50:39

代码MyBatisJava

2024-02-07 13:37:39

AWS系统应用程序

2019-06-21 08:39:23

SQLmysql索引

2021-07-28 14:35:09

代码进度条前端

2019-12-10 09:47:51

IaaS云计算物联网

2024-07-12 11:44:39

2024-08-07 08:51:20

Go优化开发

2020-12-24 19:29:08

PCIntel芯片

2023-12-26 17:18:13

darktable

2020-08-21 10:59:10

微软服务器运维

2012-05-02 11:09:38

无线网络数据传输

2012-05-02 12:39:31

无线网络多跳无线网络数据传输

2017-05-31 15:36:59

5G频谱传感器

2023-05-22 07:27:08

AI

2009-06-24 16:00:00

2021-07-28 09:32:57

Go社区GitHutGo模块
点赞
收藏

51CTO技术栈公众号