ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Search 浏览器内置广告拦截器指南:WKContentRuleList 网络层拦截为何零开销

Search 浏览器内置广告拦截器指南:WKContentRuleList 网络层拦截为何零开销 Search 浏览器内置广告拦截器指南WKContentRuleList 网络层拦截为何零开销【免费下载链接】SearchA small, fast WebKit browser for macOS, by Office Commun.项目地址: https://gitcode.com/gh_mirrors/search59/SearchSearch 是一款轻量快速的 macOS WebKit 浏览器约 3 MB由 Office Commun 出品。它内置的广告拦截器基于WKContentRuleList实现规则在启动时只编译一次拦截发生在 WebKit 的网络层——请求还没发出去就已被丢弃运行时开销近乎为零。本文用大白话讲清楚这套网络层广告拦截为什么比常见的 JS 注入式拦截更快、更省电以及你如何开关和按站点关闭它。先搞懂广告拦截的两种做法浏览器拦截广告通常有两条路JS 注入式页面加载后往页面里注入一段 JavaScript动态查找并隐藏广告元素。广告往往先出现再消失而且脚本要跟随页面跑占用 JS 线程、消耗 CPU。网络层拦截在请求发出之前就判断这个地址是不是广告/跟踪器是则直接丢弃。页面里根本没有东西可渲染也就没有先渲染再隐藏的浪费。Search 走的是第二条路核心是 macOS 系统 WebKit 框架自带的WKContentRuleListAPI——这是 Safari 同款引擎的标准能力不是第三方库。WKContentRuleList 为什么快一张表看懂对比维度JS 注入式拦截WKContentRuleList 网络层拦截Search 的做法拦截时机页面加载后、脚本运行时请求发出之前CPU 开销每个页面持续执行 JS规则只编译一次之后由 WebKit 网络栈匹配应用几乎不参与用户体验广告可能闪一下再消失广告从未存在页面无闪烁流量/加载广告资源可能已下载请求直接被丢弃省流量省时间出错方式脚本与页面互相干扰规则是白名单式的行为稳定、可预期一句话总结JS 拦截是事后补救网络层拦截是事前拦截。事后补救永远比事前拦截贵。Search 是怎么做的三个关键点1. 规则只编译一次缓存在系统里启动时Search 把拦截规则交给 WebKit 编译标识符固定为office-shieldstore.compileContentRuleList( forIdentifier: office-shield, encodedContentRuleList: json )编译完成后WKContentRuleList由系统缓存在磁盘上。下次启动直接复用已编译好的清单——所以编译这个动作的代价是一次性的日常浏览时它不存在。编译逻辑在 Shield.swift#L111-L126而启动即编译的调用在 Browser.swift#L739-L743。2. 只拦第三方不碰网站自己的内容规则清单里内置了一份只干两件事看你、卖广告的第三方域名doubleclick.net、googlesyndication.com、hotjar.com、amplitude.com 等 40 多个匹配时带有third-party条件trigger: { url-filter: ^https?://([^/]\\.)?(escaped), load-type: [third-party] }, action: { type: block }也就是说一个站点自己的脚本、图片照常加载被拦的只是从别处来、只为跟踪和展示广告的第三方请求。清单定义在 Shield.swift#L57-L70。3. 外观隐藏规则刻意保持精简除了拦请求还有一条css-display-none规则隐藏少数百分之百是广告位的节点如.adsbygoogle、iframe[src*doubleclick.net]。代码注释里写得很直白外观类规则宁少勿多——清单一激进拦截器就会开始吃页面把正常内容也藏掉。这份克制的设计在 Shield.swift#L72-L80。快速上手如何开启或按站点关闭拦截广告拦截默认开启不需要任何设置。想管理它打开设置 › 隐私可以看到 Block ads and trackers 总开关页面打开时还会多出一个 Block on 当前站点 开关——某个网站的结账流程、视频被拦坏了只在这里单独关掉页面自动重载其他站点不受影响如果规则编译失败极少见设置页会明确显示 Nothing is being blocked until this clears 并提供 Try again 按钮而不是悄悄不拦截。按站点暂停的设置项位于 Settings.swift#L371-L394。 小技巧单站点关闭后规则会在下一次导航时生效tune在导航决策处重新挂/摘规则无需重启浏览器。见 Browser.swift#L1961-L1968。源码导读广告拦截的全部代码在这几个文件里Search 坚持一个文件管一件事整个拦截器只涉及四处文件职责Shield.swift拦截器本体域名清单、规则编译、按站点开关Tab.swift#L468每个新标签页创建时领取拦截器Shield.shared.protectBrowser.swift#L1967每次导航前为目的地站点决定规则挂上还是摘下Settings.swift#L374设置页里的总开关与按站点开关项目对这套方案的定位写在 README.md#L88The ad blocker is aWKContentRuleListcompiled once at launch and enforced inside WebKits networking, before a request is made — zero cost at run time, unlike a JavaScript blocker.常见问题Q拦截器会不会误伤正常内容A只拦第三方广告/跟踪域名 极少数确定的广告位选择器站点自身内容不动。真遇到坏掉的网站用Block on 该站点开关单独关闭即可。Q为什么不直接内置 uBlock Origin 那种完整过滤引擎A那是设计取舍。Search 追求小而快整个应用约 3 MB、纯 Swift、无第三方依赖。内置拦截器覆盖最常见的广告与跟踪场景重度过滤需求可以通过它自带的 Chrome 扩展支持解决设置 › 扩展。Q它真的完全无性能损耗吗A规则匹配发生在 WebKit 网络栈内部由系统 C 层完成应用进程不参与、不跑脚本已编译清单还缓存在磁盘。日常感受就是页面变轻了而不是多跑了一个后台程序。小结Search 的广告拦截器是零配置、零干扰、零运行时开销的典范快拦截发生在请求发出之前广告根本没有下载和渲染省规则一次编译、系统缓存浏览过程无 JS 参与稳只针对第三方域名 极简外观规则误伤面小可控全局开关 按站点开关坏了哪里关哪里。如果你想要一个打开就是干净页面的浏览器Search 内置的 WKContentRuleList 广告拦截值得你直接用默认设置——它甚至不需要你知道它的存在。【免费下载链接】SearchA small, fast WebKit browser for macOS, by Office Commun.项目地址: https://gitcode.com/gh_mirrors/search59/Search创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表