1

我正在编写 Chrome 扩展程序。我有一个在后台计时器(setInterval)上运行的 $.post() 命令。回调调用解析函数:

function parseData(new_data) {
  new_data = $.parseJSON( new_data );
  for(var x=0; x<new_data.length; x++) {
    var obj = new CustomObj( new_data[x] );
    // I commented out code here in order to help isolate the problem.
  }
}

CustomObj 以典型的 JS 方式进行原型设计...

function CustomObj(data){
   this.data = data;
}
CustomObj.prototype.getName = function() {
  return this.data.name;
}
// Of course, there are a few more methods here...

问题:扩展将导致严重滞后。如果我将它设置为每 10 秒执行一次 $.post()(只是为了加快问题的出现),在 5 分钟内刷新 Chrome 中的任何选项卡都会显示“等待 [我的扩展程序]”大约 30 秒。最终浏览器或多或少会被锁定。

我发现:如果我注释掉 for() 循环的内部结构,一切都只是桃色。从来没有滞后。如果我只是将上面的行放在 for(); 循环(创建 CustomObj),问题又回来了。

据我所知,这似乎是一个垃圾收集问题。我尝试过隐式定义 obj 变量以及显式删除它(尽管在 JavaScript 中删除对象让我相信 delete 是不够的)。似乎没有任何效果。

谢谢。

4

0 回答 0