具有基本功能的镀铬扩展记忆猪

时间:2010-08-11 01:43:01

标签: javascript scripting google-chrome google-chrome-extension

我的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扩展程序,您可以慢慢看到页面大小不断增大。通过上面的示例,您可以看到选项卡增加但扩展内存使用量不会增加,直到事情变得更加困难。

为什么内存使用量会不断增加,因为正在创建的项目是一次又一次地无效?不应该从内存中清除对象吗?

1 个答案:

答案 0 :(得分:1)

这可能不是一个非常大的问题,Chrome / V8可以选择何时运行垃圾收集器,因此它可能不会在你期望的时候运行。您正在实例化可能未被释放的对象中的对象。

检查正在发生的事情的最简单方法是在调试器中打开后台页面,单击配置文件选项卡,然后单击“堆快照”两次,在第二次单击后,您将看到一个报告,指示内存已有被释放了。基本上你强迫垃圾收集发生。见附件截图。

Steps