JavaScriptでどのようなコードでメモリリークが発生するのかを理解したいと思い、以下のスクリプトを作成しました。ただし、OS X の Safari 6.0.4 でスクリプトを実行すると、アクティビティ モニターに表示されるメモリ消費量は実際には増加しません。
私のスクリプトに何か問題がありますか、それとも最新のブラウザーではもう問題ではありませんか?
<html>
<body>
</body>
<script>
var i, el;
function attachAlert(element) {
element.onclick = function() { alert(element.innerHTML); };
}
for (i = 0; i < 1000000; i++) {
el = document.createElement('div');
el.innerHTML = i;
attachAlert(el);
}
</script>
</html>
このスクリプトは、Google の JavaScript スタイル ガイドの Closure セクションに基づいています: http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures
編集: 上記のコードがリークする原因となったバグは明らかに修正されました: http://jibbering.com/faq/notes/closures/#clMem
しかし、私の疑問は残ります。最新のブラウザーでメモリ リークを起こす JavaScript コードの現実的な例を誰か提供できるでしょうか?
メモリ リークが複雑な単一ページ アプリケーションの問題になる可能性があることを示唆する記事がインターネット上に多数ありますが、ブラウザで実行できる例を見つけるのに苦労しています。