具有太多元素的HTML内存使用情况

时间:2012-09-03 00:10:32

标签: javascript memory

当您使用Node.removeChild()时,它会返回已删除的节点。 然后,如果需要,您可以在DOM上再次附加它。 所以,从逻辑上讲,它留在内存上以使其成为可能。您可以在http://jsfiddle.net/6QtjD/上查看。

我的疑问是:如果我删除了太多节点,将删除的节点设置为本地var,它将保留在内存中,直到页面更改或直到范围结束?

例如:如果我创建1000个节点并删除所有节点,每0.1秒。在10秒钟内,我的页面将在内存中使用100.000个节点的空间?

function create1000() {
    var div, i;

    for(i=0; i<1000; i++) {
        div = document.createElement("div");
        div.innerText = i;
        document.body.appendChild(div);
        document.body.removeChild(div); 
    }
}

for(var i=0; i<10000; i+=100)
    setTimeout(create1000, i);

谢谢!

2 个答案:

答案 0 :(得分:2)

没有理由,因为你没有抓住它,所以它应该是可收藏的。

多年来,不同浏览器的js实施中确实存在各种泄漏,但我不担心这种情况,除非我看到明确的证据(并且得到明确的证据,我会亲自尝试)

答案 1 :(得分:1)

当你甚至没有捕获document.body.removeChild()的返回值时,你可以99.9%肯定javascript实现将丢弃它并且不保留在内存中,即使有保证无法访问它。 0.1%的疑问是因为这是浏览器javascript引擎的内部细节,你不能确定地球上没有浏览器会在这种情况下泄漏内存。