【发布时间】:2009-01-29 13:06:53
【问题描述】:
编辑:在进一步检查中,Firefox 似乎没有这样做,但 Chrome 肯定会这样做。我猜这只是新浏览器的一个错误 - 对于每个事件,Chrome 中都会发生 I/O 读取,但 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()) 和 try/finally 的想法都来自 here,尽管它们似乎都没有帮助 - 可以理解,因为它们只是用于 ie6 修复。
我还尝试过使用 addEventListener 和 onmouseover 方法来添加事件。我发现防止内存增加的唯一方法是注释掉这两行代码。
【问题讨论】:
-
您在真实脚本中的 mouseover 事件处理程序中有任何内容吗?我无法重现您的问题。 (FF 3.0.5 Linux)
-
上面的代码是我正在测试并遇到问题的逐字记录。它不会立即发生,大约需要 20 秒左右移动鼠标才能开始显示。在我看来,好像某些缓冲区最终会不堪重负。
-
在进一步的测试中,FF似乎在上述代码上没有这个问题,只有Chrome。
标签: javascript memory-leaks event-handling