編集:さらに調べてみると、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 メソッドを使用して実験しました。メモリの増加を防ぐ唯一の方法は、両方のコード行をコメントアウトすることです。