1

我有一個非常複雜的擴展名,但我會簡化問題,可以輕鬆地複製。鉻擴展內存豬基本功能

manifest.json的:

{ 
    "name": "script", 
    "version": "1.0", 
    "description": "script", 
    "browser_action": { 
    "default_icon": "icon.jpg" 
    }, 
    "permissions": [ 
    "tabs", 
    "http://www.google.com/" 
    ], 
    "background_page" : "background.html", 
    "content_scripts":[ 
    { 
"matches":["http://www.google.com/"], 
"js":["/jquery.js","/script.js"] 
} 

] }

的script.js:

var item = null; 
restart(); 
function restart() { 
    item = null; 
    item = new Object(); 
    item.Go = Go; 
    item.Go(); 
} 

function Go() { 
    setTimeout(function() { restart(); }, 5); 
} 

background.html:什麼也不做,現在

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <script src="http://code.jquery.com/jquery-1.4.2.min.js" language="javascript" type="text/javascript"></script> 
</head> 
<body> 
</body> 
</html> 

現在,當我的項目應該做的非常簡單...刷新頁面,抓取數據,將結果發佈到本地jsonp Web服務,重複。我遇到了chrome選項卡和擴展程序內存問題,可以通過在chrome中按SHIFT + ESC來查看擴展程序。運行上述Chrome擴展,您可以慢慢看到頁面大小不斷增加。通過上面的示例,您可以看到該選項卡增加,但擴展內存使用量不會增加,直到事情變得更加困難。

爲什麼內存使用量會不斷增加,唯一發生的事情是正在創建的項目,然後一次又一次地失效?不應該從內存中清除對象嗎?

+0

我想你可能已經簡化了太多。刮取的數據發生了什麼? – mraaroncruz 2010-08-11 01:58:41

回答

1

這可能不是一個令人驚訝的大問題,Chrome/V8可以選擇何時運行垃圾收集器,所以它也可能不會在你期望的時候運行。您正在實例化對象中可能沒有被釋放的對象。

檢查所發生的事情最簡單的方法,是在調試器中打開你的後臺頁面上,單擊配置文件選項卡,然後單擊「堆快照」兩次,之後第二個點擊,你會看到一個報告,應該指出的內存已經被釋放。基本上,你迫使垃圾收集發生。見附件截圖。

Steps