fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
阅读:3883回复:11

[Nightly] Firefox 33.0a 实现每个附加组件独立放置于一个 compartment

楼主#
更多 发布于:2014-06-26 10:52
什么是 Compartment(下称区块)?简单来说就是 Firefox 里面 Javascript 代码所占用内存放置的一个位置,一般会有多个区块,比如一个网站里面 JS 代码所使用内存就会放在一个区块里面,属于 content 的区块,而 Firefox 自身的 JS 代码所占用内存也会放置在一个或多个区块当中,属于 chrome 的区块,不同的区块可以通过附加组件,脚本之类的互相引用(reference)。

在 Firefox 15 当中,实现了浏览器主动切断不必要的 content 和 chrome 区块之间的联系,从而防止产生 zombie compartment。现在 Firefox 33.0 实现每个附加组件一个区块(compartment per addon),这就意味着我们可以更好监控每个附加组件对性能的影响以及它们的内存占用,这也意味着有一些附加组件可能会挂掉

开启方法是在 about:config 找到:
dom.compartment_per_addon
双击改为 true。

之后继续使用,如果一些附加组件受此影响功能不正常或挂掉,那有可能是这个引起。错误控制台等其他日常监控手段应该都可以看到异常。一般是和 window 有关的全局变量和对象出了问题。用 Add-on SDK 写的并且调用 .jsm 模块的扩展已经实现了这个功能,所以不会有问题。现在主要针对传统的 XUL Overlay 的扩展。

为什么要这么做?
1、最主要是为了能够让附加组件兼容多进程项目 e10s,否则传统扩展可能大多都会挂掉。
2、可以更好监控每个附加组件内存占用,以往附加组件内存占用都是和 Firefox 的 chrome 代码混在一起,实现以后 about:memory 可以将其区分开来了。
3、更好监测每个附加组件的性能,可以针对每个附加组件所在区块进行监测,比如附加组件运行的时长,telemetry 今后就可以对附加组件发挥威力了。


Bug 990729 - Associate JS compartments with addon XUL code and components/modules

消息来自 google 网上论坛 firefox-dev 版块

最新喜欢:

fiagfiag pein0sagapein0s... dgoddgod
Firefox More than meets your experience
游客

返回顶部