Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Javascript更新DOM导致内存泄漏(仅在Firefox中?)_Javascript_Ajax_Firefox_Memory Leaks_Dhtml - Fatal编程技术网

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

通过Javascript更新DOM导致内存泄漏(仅在Firefox中?),javascript,ajax,firefox,memory-leaks,dhtml,Javascript,Ajax,Firefox,Memory Leaks,Dhtml,我知道以前有人问过这个问题,但没有一个答案能解决这个问题。我正在测试一个AJAX网页,它通过javascript更新DOM中的元素 每分钟,服务器都会查询新数据,DOM也会相应地更新。据我所知,Chrome中此页面的内存使用量在增长,但不会太多(开始时约为40 MB,最大可达80 MB)。然而,在Firefox中,内存使用量从120MB左右开始,可以扩展到400MB以上。我已经用Firebug浏览了Javascript,当DOM通过我的Javascript方法更新时,内存似乎扩展得最多 DOM操

我知道以前有人问过这个问题,但没有一个答案能解决这个问题。我正在测试一个AJAX网页,它通过javascript更新DOM中的元素

每分钟,服务器都会查询新数据,DOM也会相应地更新。据我所知,Chrome中此页面的内存使用量在增长,但不会太多(开始时约为40 MB,最大可达80 MB)。然而,在Firefox中,内存使用量从120MB左右开始,可以扩展到400MB以上。我已经用Firebug浏览了Javascript,当DOM通过我的Javascript方法更新时,内存似乎扩展得最多

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);
}
在向DOM中的节点添加新数据之前,我首先清除现有数据。我尝试了很多方法,包括这里所描述的:

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

function clearChildren(node){
    if(node != null){
        while (node.hasChildNodes()) node.removeChild(node.firstChild);
    }
}
我还读到()浏览器只有在垃圾达到一定程度时才开始收集垃圾?可以证实吗?由于内存的增长,我觉得我的电脑在一段时间后运行缓慢

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

任何帮助都将不胜感激

多谢各位

innerHTML=''
准备用于GC处理的变量的方法是错误的。
您需要对元素及其引用的每个元素使用
delete
功能。
很多,对吧?
这就是为什么我们有为我们编写的JS库。我在Mootools中检查了代码(下载并搜索destroy),在我看来,代码编写正确。
我想其他图书馆也会如此

可以证实吗

视情况而定


一般来说,浏览器会在他们喜欢的时候使用GC,并且启发式方法会经常改变。我怀疑如果你每晚尝试Firefox,你会看到与上面描述的完全不同的行为。自Firefox 5发布以来,至少有2次GC启发式更改。

感谢您的回复-Mootools会干扰JQuery吗?我一直在我的网站上使用JQuery,当我尝试使用Mootools destroy()函数时,我收到一个JS错误,说“destroy()不是函数”,你需要正确设置它才能一起玩(在我的网站上,它们做得很好)。例如,您需要使用
document.id('selectors…')
谢谢,而不是在依赖于Mootools的代码中使用
$
,现在似乎内存使用量没有不断增长,我确实看到它有时在缩小。谢谢你的帮助。我们现在是什么版本?我失去了跟踪Firefox5是目前稳定的版本。第六次会议定于8月中旬举行。