【问题标题】:Zombie compartments in Firefox extensionFirefox 扩展中的僵尸隔间
【发布时间】:2012-04-05 00:31:30
【问题描述】:

我参与了 Firefox 扩展的开发。我们的扩展很复杂,我们遇到了永久性僵尸隔间的问题。 Mozilla Zombie compartments page 仅提供一般信息,仅介绍问题和测试方法。

所以,我想问一下是否有人知道常见的瓶颈和有问题的设计模式(或者简单地说,已知的错误和失败)以及如何处理它们的最佳实践。

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

【问题讨论】:

    标签: javascript firefox memory-leaks firefox-addon


    【解决方案1】:

    最常见的故障模式是对网页的引用存储时间过长。发生这种情况的原因有几个:

    1. 分配给全局变量。尤其是因为忘记了“var”。
    2. 分配给全局变量的成员,用于存储状态,然后不清除它。
    3. 创建关闭网页对象的新函数对象,然后将这些函数存储一段时间(尤其是作为事件侦听器)。

    基本上,无论何时您处理网页中的某些内容,请确保您永远不会将其分配给使用 var 声明的局部变量以外的任何内容,并且您不会创建关闭它的新的长寿命函数。这两件事对大部分情况都有帮助。

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

    【讨论】:

    • 是的,这些都是非常通用的提示。对于通用提示,我们在 Mozilla 上有很好的 Using XPCOM in JavaScript without leaking 页面。从经验中获得更具体的信息?
    • 这些实际上非常具体。 “忘记变量”位是我见过的最常见的错误之一。使用严格模式可能是避免该陷阱的最简单方法。
    • 由于每个严肃的扩展都使用“严格”模式,这并不是真正的陷阱。我对一些棘手的情况很感兴趣
    • 呃.. 很多“严肃”的扩展不使用严格模式。无论如何,最常见的“棘手”情况是我列表中的#2。在对象上存储状态,然后不清除它。
    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多