forked from uBlock-LLC/uBlock
-
Notifications
You must be signed in to change notification settings - Fork 40
从内存占用角度阐述 uBlock 安装以后内部发生了什么
fang5566 edited this page Mar 18, 2015
·
5 revisions
- uBlock 会载入默认选择的过滤规则列表:
- 这时会出现短时的内存波动(因为在载入、解析、排序和保存),但最终会被垃圾收集器回收
- 所有这些短时内存波动会导致 uBlock 的基准内存占用值增加
- 几分钟之后,uBlock 会检查是否有过滤规则列表需要更新
- 如果有一个或多个规则列表需要更新,uBlock 会启动后台任务以获取规则列表的最新版本,无论列表实际是否过期。
- 一旦所有规则列表更新完毕,uBlock 就会从内存中刷新并载入最新版本的列表
- 这时又会出现一轮短时的内存波动,但最终会被垃圾收集器回收
- 同样地所有这些短时内存波动会导致 uBlock 的基准内存占用值增加
- 你可以根据自己需要禁止自动更新,但建议让 uBlock 来管理,手动强制更新还是作为第二选择吧
-
几分钟之后,如果没再选择其他规则列表或列表内容没有发生变化,uBlock 会生成一个快照
- 有了快照 uBlock 下次载入时就可以跳过解析和排列数据的步骤
- 生成快照同样也会导致短时的内存波动,但最终也会被垃圾收集器回收
- 同样地所有这些短时内存波动会导致 uBlock 的基准内存占用值增加
- 任何更改规则列表的选择和列表内容发生变化都会使 uBlock 的快照作废
- 即使基准内存占用值增加,在进行垃圾回收以后 uBlock 的_自身内存占用_ 依然要比 Adblock Plus 要少一些。
- uBlock 在打开网页之后_增加的一小部分内存占用_ 也远比 ABP 来得少
- 打开网页以后增加的内存占用只是网页本身内存占用的一部分
- 相对于用 Chromium 的_"任务管理器 "_查看到的扩展自身内存占用值,打开网页后增加的内存占用值用户是无法轻易查看到的
- 虽然这个值不太直观,但足以得出 uBlock 比 ABP 节省内存的结论了,毕竟 uBlock 没有将数千条 CSS 规则插入到网页和嵌入框架当中
如果此时你的 uBlock 已经有了一份有效的快照,那么它的运行效率就最高。
因为下次你启动 uBlock 时如果有一份有效的快照,那它的载入时间就会比没有快照时缩短很多[1],基准内存占用也比没有时要少。
所以我的观点是如果你让 uBlock 在安装以后自我优化,那它的运行效率就会最高,意思是 uBlock 后续启动时的运行效率比你初次安装时观察到的要更高。
[1] 参见 https://www.youtube.com/watch?v=BpypOeK10N8
如果你想自行观察内存占用,除了上面提到的垃圾收集,还要注意以下一些事项:
- 这个 Chromium 的 bug 会导致打开扩展弹出界面时系统性地产生内存泄漏
- 当前打开的扩展选项页面会增加扩展本身的内存占用值
- 有时一个浏览器的垃圾收集 ("GC") 会比其他浏览器来得懒,也就是更迟才执行
- 在测试时发生过我得使用开发工具强制执行 GC 的情形
- 注意:上述情况是从基于 Chromium 的浏览器中测出的,但我在早期的 Firefox 预览版本当中发现内存波动导致的内存占用峰值要更小。
- 相关文章:"关于内存占用基准测试以及快照的注意事项"
- 提示:"扩展弹出界面会产生系统性的内存泄漏"
uBlock Origin - 一款支持 Chromium、Firefox 和 Safari 的高效过滤工具,快速且简洁