下面的JavaScript代碼似乎泄漏內存,但我不知道爲什麼。我已經在Chrome 19和Firefox 12試過這種的代碼如下:Javascript removeChild內存泄漏?
<body>
<input id="add" type="button" value="add" onclick="add()" />
<input id="remove" type="button" value="remove" onclick="remove()" />
<div id="content">
</div>
</body>
<script>
var count = 0;
function add() {
var i = 0,
newdiv;
for (i = 0; i < 10000; i++) {
newdiv = document.createElement('div');
document.getElementById("content").appendChild(newdiv);
newdiv.setAttribute('id', "div" + count);
newdiv.innerHTML = "section " + count;
newdiv = null;
count = count + 1;
}
}
function remove() {
var i = 0;
for (i = 0; i < count; i++) {
document.getElementById("content").removeChild(document.getElementById("div" + i));
}
count = 0;
}
</script>
當你不斷點擊添加按鈕,然後刪除按鈕Windows任務管理器內存不斷增加。當垃圾回收開始時,我預計內存會減少,但這似乎永遠不會發生。
所以,我的問題是:在這段代碼中是否有內存泄漏?如果是這樣,我該如何重構代碼來修復泄漏?
它似乎在Chromium 19/Ubuntu 11.04中沒有內存問題。 –
只是一個或兩個假設:'newdiv = null;'不等於'delete newdiv;'所以我可能認爲刪除比設置一個'null'好得多,實際上它不是'undefined' ...如果你使用本地存儲的文檔引用,並在閉包中執行所有內容,而不是在全局窗口上創建東西,甚至可以加速這件事,並減少內存使用率。 –