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

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

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

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

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

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

推荐阅读