2012-04-05 17 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