通过Javascript更新DOM导致内存泄漏(仅限Firefox?)

use*_*092 5 javascript ajax firefox memory-leaks dhtml

我知道之前已经问过这个问题,但似乎没有一个答案可以解决这个问题.我正在测试一个AJAX网页,它通过javascript更新DOM中的元素.

每分钟,都会查询服务器以获取新数据,并相应地更新DOM.据我所知,Chrome中此页面的内存使用量增长,但不会太多(它开始大约40 MB,最大可能达到80 MB).但是,在Firefox中,内存使用量大约为120 MB,可以扩展到400 MB以上.我已经使用Firebug逐步完成了Javascript,当通过我的Javascript方法更新DOM时,内存似乎扩展得最多.

DOM操作很简单,例如:

var myTable = document.createElement("table");

var thead = document.createElement("thead");
var tr = document.createElement("tr");
var th = document.createElement("th");
th.appendChild(document.createTextNode("column1"));
tr.appendChild(th);

for(var test in obj.testObjs){
    th = document.createElement("th");
    th.appendChild(document.createTextNode(obj.testObjs[test].myVar));
    tr.appendChild(th);
}
Run Code Online (Sandbox Code Playgroud)

在将新数据附加到DOM中的节点之前,我首先清除现有数据.我已经尝试了很多方法,包括这里描述的内容:如何在没有内存泄漏的情况下删除DOM元素?

以及一个简单的方法,例如:

function clearChildren(node){
    if(node != null){
        while (node.hasChildNodes()) node.removeChild(node.firstChild);
    }
}
Run Code Online (Sandbox Code Playgroud)

我还读过(循环添加/删除DOM节点导致JavaScript中的内存泄漏?)浏览器只有在达到某个级别时才开始收集垃圾?可以证实吗?由于记忆力不断增长,我觉得我的电脑在一段时间后运行缓慢.

我觉得必须有一个解决方案,因为我测试过的执行相同功能步骤的商业网站不会导致内存使用增长.

任何帮助将不胜感激.

谢谢.

Ita*_*vka 2

innerHTML=''
Run Code Online (Sandbox Code Playgroud)

为 GC 处理准备变量的方法是错误的。
您需要delete在该元素以及该元素引用的每个元素上使用该函数。
很多,对吧?
这就是为什么我们有专门为我们编写的 JS 库。我检查了 Mootools 中的代码(下载并搜索destroy),在我看来,它的编写是正确的。
我想其他图书馆也会有同样的情况。