uBlock Origin 在 Firefox 里表现最佳 - fang5566/uBlock GitHub Wiki

本文档解释了为何说 uBO 在 Firefox 里表现最佳。

解除隐藏 CNAME

通过 CNAME record 解除伪装为第一方的第三方服务器。这个功能使得 Firefox 里的 uBO 在屏蔽第三方跟踪器方面,相较于其他浏览器或广告过滤工具,最为高效。

c

暗绿/暗红色的柱状分别表示 Firefox 里 uBO 支持解除隐藏 CNAME 前后的屏蔽能力。

来源:"Characterizing CNAME Cloaking-Based Tracking on the Web",来自 Asia Pacific Network Information Centre,发布于 2020 年 8 月。

HTML 过滤

HTML 过滤 的作用是在 HTML 文档的响应部分被浏览器解析 之前 就对其进行过滤。

例如它允许 HTML 文档中的特定标签(tag)在被浏览器解析和执行以前就将其移除,其他浏览器则没有可靠方式能做到。这项功能所需的 webRequest.filterResponseData() API,目前只有 Firefox 能提供。

响应本体(Response body)过滤

参见 Implement network filter option replace=>

浏览器启动

浏览器启动时,Firefox 会等待 uBO 准备好并从已打开的标签页屏蔽网络请求。

但对于 Chromium 类浏览器却并非如此。跟踪器和广告可能在 uBO 启动前就钻入已打开的标签页,而在 Firefox 里它们都被正确屏蔽了。

能够在浏览器启动前就可靠屏蔽对使用默认拒绝模式屏蔽第三方资源和 JavaScript 来说尤为重要。

uBO 提供了一项设置(默认关闭),可暂时减轻该问题对 Chromium 类浏览器的影响,请参见暂停网络活动直至所有规则列表都被载入。但该设置不是 100% 有效,有时候会有遗漏。

预读取

预读取功能默认已被 uBO 禁用,Firefox 也能很可靠地阻止其生效,但 Chromium 类浏览器却做不到。

Chromium 类浏览器在决定是否禁止预读取功能是方面,给予网站的优先级高于用户设置。

参考文档:禁止预读取

WebAssembly

Firefox 版本的 uBO 使用 WebAssembly 代码作为核心过滤机制的代码路径。但 Chromium 类浏览器却并非如此,因为它需要在扩展的 manifest 获取额外的权限,与 Chrome 网上商店发布本扩展会起冲突。

更多信息:https://github.com/WebAssembly/content-security-policy/issues/7#issuecomment-441259729

存储压缩

Firefox 版本的 uBO 默认使用 LZ4 格式压缩用于存储原始的过滤规则列表、已编译的列表数据和内存快照到磁盘空间。

LZ4 格式压缩要求使用 IndexedDB,但它在 Chomium 类浏览器的无痕模式下有问题,具体表现为 IndexedDB 的实例总是被重置,导致 uBO 启动效率低,过滤规则列表显示为过期(参见 #399)。要求使用 IndexedDB 实例是因为它支持保存 browser.storage.local API 所不具备的 Blob 类的数据。