我正在开发一个小的lib /脚本,它将在文档正文中搜索<div src="..."></div>
,从指定的src中检索内容(使用XHR)并将内容插入到div中。在进一步讨论之前,让我给你一个编码的努力:
function Include(ele) {
this.ele = ele;
this.xhr = new XHR();
this.xhr.onload = (function(incObj){
return function(){
incObj.onload.call(incObj,this);
}
})(this);
this.xhr.open("GET",ele.getAttribute("src"),false);
this.xhr.send();
}
Include.prototype.XHR = function(){/* code to find a viable xhr object*/}
Include.prototype.onload = function(){/* stuff */}
var inc = new Include(document.getElementById("someId"));
在发生每个XHR请求并处理内容之后,由于关闭,xhr对象不会被销毁,导致创建的Include对象不会被破坏。反过来,这是一个内存泄漏。对于a:几乎没有包含请求,b:这些请求的内容很少,但随着包含的增加和响应内容的增加,你可以稳定地看到内存使用量的增加,这并不是什么大问题。我将如何打破关闭(或使用可靠的工作,而不依赖于使用全局变量,obj等)来修复此泄漏?
(请不要建议使用库,即使我正在处理的是浏览器js,我的问题更多地适用于javascript本身的工作方式)
答案 0 :(得分:2)
你可以试试这个:
this.xhr.onload = (function(incObj){
return function(){
incObj.onload.call(incObj,this);
incObj.xhr.onload = null;
}
})(this);
如果您还有其他事件处理程序,则在您不再需要该对象时也应该将它们处理掉。