我正在开发一个 chrome 扩展,我努力尝试了网络上的所有解决方案,但似乎没有一个工作。我的 jsscript 仅通过 XMLHttpReq(XHR) 消耗一个 html(每个请求大约 13,30k)并解析响应,丢弃与某些正则表达式不匹配的所有内容。所有这一切都发生在 XHR onload 方法中的 setTimeout 内部,并且似乎有效,但问题出现在大约 10 分钟后。当我看到记忆中发生的事情时。10 分钟后,扩展 mem 从 10mb 增长到 60。那么..会发生什么并且存在任何解决方案?我读到这是一个正常的增长,因为它是一个新的请求,并且垃圾收集器会在一段时间后运行(很晚),但对我来说这是另一回事。提前致谢。
var CHECK_TIME = 30000;
var request = new XMLHttpRequest();
var checkLastPage = {
url:"http://www.last.fm/inbox",
inboxId:"inboxLink",
lastAttempt:0,
init : function(){
request.onload = function(){
checkLastPage.loadStuff(request);
setTimeout(checkLastPage.init, CHECK_TIME);
}
request.open("GET",checkLastPage.url,false);
request.send();
},
loadStuff:function(request){
var node = checkLastPage.getInboxNode(request);
//...more code
},
getInboxNode:function(request){
var htmlTemp = document.createElement('div');
htmlTemp.innerHTML = request.responseText; // Hack horrible para poder parsear el nodo importante
var htmlResponse = htmlTemp.getElementsByTagName('li');
var relevantNode = null;
for (var i = 0; i < htmlResponse.length; i++) {
var node = htmlResponse[i];
if(node.id == checkLastPage.inboxId){
relevantNode = node;
}
}
htmlResponse = null;
htmlTemp = null;
return relevantNode;
}, //...more code}
我还使用 JQUery 和外部 setInterval 进行了测试,但结果相同:
var CHECK_TIME = 30000;
var checkLastPage = {
url:"http://www.last.fm/inbox",
inboxId:"inboxLink",
lastAttempt:0,
init : function(){
$get(checkLastPage.url,function(data){
console.log(data)
}
}
//more code ...
}
setInterval(checkLastPage.init,CHECK_TIME)