当我使用 Chrome 使用简单的脚本发出一系列 XHR 请求时,例如:
var q = (function DUCK(){
var x = new XMLHttpRequest();
x.open('POST', '/someValidPage');
x.onload = function(){console.log("responded!");}
x.send();
});
//Just calling XHR a bunch of times to create the bug.
q(); q(); q(); q(); q(); q(); q(); q(); q(); q(); q();
q(); q(); q(); q(); q(); q(); q(); q(); q(); q(); q();
x.onload
在进行所有q()
调用之后,浏览器会立即构建一系列 22 个附加事件处理程序 ( )。这是意料之中的,但是响应已经下降并且对象不再被使用,XHR 对象保留在内存中,直到浏览器的垃圾收集器来清理它,它会删除所有额外的处理程序。
当我完成对象时,我想删除对象和事件......诸如 x.removeEventHandler('load') 之类的东西没有显示结果,并且不适用于 IE8(这也令人沮丧)。
如何正确分离事件并从内存中删除对象?