我正在编写Chrome扩展程序。 我有一个$ .post()命令在后台运行一个计时器(setInterval)。 回调调用一个解析函数:
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变量以及明确删除它(尽管Deleting Objects in JavaScript让我相信删除是不够的)。似乎没什么用。
感谢。