编辑:在进一步检查中,Firefox 似乎没有这样做,但 Chrome 肯定会这样做。我猜这只是新浏览器的一个错误 - 对于每个事件,I/O 读取也会发生在 Chrome 中,但不会发生在 FF 中。
当我在浏览器中加载以下页面时(我在 Vista 下的 Chrome 和 Firefox 3 中进行了测试)并在周围移动鼠标时,内存总是增加并且似乎永远不会减少。
这是:
- 浏览器的预期行为
- 浏览器中的内存泄漏或
- 提供的代码中的内存泄漏?
.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test</title>
</head>
<body>
<script>
var createEl = function (i) {
var el = document.createElement("div");
var t = document.createTextNode(i.toString());
el.appendChild(t);
t=null;
el.id=i.toString();
var fn = function (e) {};
el.addEventListener("mouseover", fn, false);
//el.onmouseover = fn;
fn = null;
try{
return el;
}
finally{
el=null;
}
//return (el = [el]).pop();
};
var i,x;
for (i= 0; i < 100; i++){
x = createEl(i)
document.body.appendChild(x);
x = null;
}
</script>
</body>
</html>
和想法都来自这里(el = [el].pop())
,尽管它们似乎都没有帮助 - 可以理解,因为它们只是用于 ie6 修复。try/finally
我还尝试过使用 addEventListener 和 onmouseover 方法来添加事件。我发现防止内存增加的唯一方法是注释掉这两行代码。