我的Chrome扩展程序非常复杂,但我会简化可以轻松复制的问题。
的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 :(得分:1)
这可能不是一个非常大的问题,Chrome / V8可以选择何时运行垃圾收集器,因此它可能不会在你期望的时候运行。您正在实例化可能未被释放的对象中的对象。
检查正在发生的事情的最简单方法是在调试器中打开后台页面,单击配置文件选项卡,然后单击“堆快照”两次,在第二次单击后,您将看到一个报告,指示内存已有被释放了。基本上你强迫垃圾收集发生。见附件截图。