2012-04-05 84 views
0

我参与了Firefox扩展的开发。我们的扩展很复杂,我们在永久僵尸隔间方面存在问题。 Mozilla Zombie compartments page只给出一般信息,只介绍问题和测试方法。因此,我想问一下,如果有人知道常见的瓶颈和有问题的设计模式(或简单地说,已知的错误和失败)以及如何处理它们的最佳实践。Firefox扩展中的僵尸隔间

补充:这是good link扩展中的内存泄漏的常见原因。还有其他建议吗?

回答

2

最常见的故障模式是长时间存储对网页的引用。这可能是由于以下几个原因而发生的:

  1. 赋值给全局变量。尤其是由于忘记'var'。
  2. 赋值给一个全局变量的成员,用于存储状态,然后不清除它。
  3. 创建关闭网页对象的新函数对象,然后将这些函数存储在某处(特别是作为事件侦听器)一段时间。

基本上,任何时候你使用网页中的某些东西时,确保你永远不会把它分配给任何非var局部变量声明,并且你不会创建新的长效函数关闭超过它。这两件事情将有助于大部分案件。

请注意,这些都不是特定于Firefox扩展;它适用于JavaScript中的所有编码...

+0

是的,这些都是非常通用的提示。对于通用技巧,我们在Mozilla上有很好的[在JavaScript中使用XPCOM而不泄漏](https://developer.mozilla.org/en/Using_XPCOM_in_JavaScript_without_leaking)页面。从经验中得到更具体的东西? – gakhov 2012-04-05 10:22:59

+0

这些实际上是非常具体的。 “忘记var”位是我见过的人最常见的错误之一。使用严格模式可能是避免这种缺陷的最简单方法。 – 2012-04-05 14:23:32

+0

由于每个严重的扩展使用“严格”模式,这并不是真正的陷阱。我在一些棘手的情况下很有趣 – gakhov 2012-04-05 16:58:42