2008-06-20 (金)
■ innerHTML がメモリリークを引き起こす例
先日悩んでいたメモリリークの原因が判明しました。 Ajax とは無関係で、innerHTML を使って書き換えていたのが良くなかったみたいです。 メモリリークを起こしていたのは、こういうコードの箇所です。 (本当は <ul>〜</ul> の部分は Ajax で読み込んだテキストが入ります。)
toggle: function(event) {
var element = event ? event.target : window.event.srcElement;
if (element.nodeName == "LI") {
element.innerHTML += "<ul><li>dummy</li></ul>";
}
},
これを、次のように createElement と appendChild を使って書き換えると、 メモリリークを回避できました。
toggle: function(event) {
var element = event ? event.target : window.event.srcElement;
if (element.nodeName == "LI") {
var ul = document.createElement("ul");
ul.innerHTML = "<li>dummy</li>";
element.appendChild(ul);
}
},
クロージャや循環参照が原因となるパターンとは違うと思うので、 なぜメモリリークになっていたのか、よく分からないのですが、
このページで解説されている「クロスページ リーク」に該当するのかもしれません。 でも、さらに試してみると、最初のコードをもっと単純に、
......
element.innerHTML = "dummy";
......
のようにしてもメモリリークするようです。 やっぱりよく分かりません。
このエントリの続き: 2008-07-28 (月)
[コメントを書く]
本日のリンク元
- 22 google検索(javascript メモリリーク)
- 15 http://www.revulo.com/PukiWiki/Plugin/AjaxTree.htm...
- 15 google検索(javascript メモリ)
- 12 google検索(javascript メモリ)
- 10 google検索(javascript メモリリーク)
- 10 google検索(javascript メモリリーク)
- 9 google検索(IE JavaScript メモリリーク)
- 9 google検索(javascript メモリ)
- 6 google検索(innerHTML メモリリーク)
- 6 http://www.google.co.jp/hws/search?hl=ja&q=javascr...
- 5 google検索(innerHTML メモリーリーク)
- 5 google検索(javascript innerhtml)
- 5 google検索(JavaScript メモリリーク)
- 5 google検索(javascript メモリリーク)
- 4 google検索(innerHTML メモリリーク)
- 4 google検索(javascript メモリリーク)
- 4 google検索(t)
- 4 google検索(javascript innerhtml メモリリーク)
- 4 google検索(javascript メモリリーク)
- 4 google検索(innerHTML メモリリーク)
- 4 google検索(innerhtml メモリリーク)
- 4 google検索(JavaScript メモリリーク)
- 4 google検索(javascript メモリリーク)
- 3 http://www.publickey.jp/blog/09/firefox.html
- 3 google検索(javascript メモリーリーク 循環参照)
- 3 google検索(javascript メモリリーク createElement)
- 3 google検索(innerHTML メモリリーク)
- 3 google検索(inneHTML メモリリーク)
- 3 google検索(javascript メモリリーク)
- 3 google検索(0h)
- 3 google検索(javascript メモリリーク)
- 3 google検索(innerhtml メモリリーク)
- 3 google検索(javascript innerhtml)
- 3 google検索(javascript メモリ)
- 3 google検索(javascript メモリリーク)
- 3 google検索(javascript メモリリーク)
- 3 google検索(javascript メモリリーク)
- 3 google検索(javascript リーク)
- 3 google検索(innerhtml メモリリーク)
- 3 google検索(innerhtml メモリリーク)
- 3 google検索(Javascript メモリリーク)
- 3 google検索(JavaScript メモリリークを起こさない)
- 3 google検索(javascript メモリ)
- 3 google検索(javascript メモリ)
- 3 google検索(JavaScript メモリリーク)
- 3 google検索(IE メモリリーク 循環参照)
- 3 google検索(javascript HTML メモリリーク)
- 3 google検索(php 5.2.8 リーク)
- 3 google検索(javascript innerHTML メモリ リーク)
- 3 google検索(javascript innerHTML)
- 3 google検索(javascript メモリ)
- 3 google検索(javascript メモリリーク)
- 3 google検索(javascript メモリリーク)
- 3 google検索(javascript メモリリーク)
- 3 google検索(innerhtml 計算 例)
- 3 google検索(innerhtml 例)
- 3 google検索(innerHTML メモリリーク)
- 3 google検索(innerHTML メモリリーク)
- 3 google検索(JavaScript メモリ)
- 3 google検索(JavaScript メモリリーク)
- 3 google検索(メモリーリーク 原因)
- 3 google検索(メモリリーク PHP)
- 3 google検索(appendchild innerhtml)
- 3 google検索(innerHTML)
- 3 google検索(ajax メモリリーク)
- 3 google検索(クロージャ メモリリーク)
- 3 google検索(JavaScript メモリリーク)
- 3 http://www.google.co.jp/hws/search?hl=ja&q=javascr...
- 2 http://www.revulo.com/notify-NotifyUser_OTHER_0712...
- 2 http://www.publickey1.jp/blog/09/firefox.html
- 2 google検索(javascript メモリリーク var)
- 2 google検索(innerhtml メモリリーク)
- 2 google検索(innerHTML メモリーリーク)
- 2 google検索(IE8 メモリリーク)
- 2 google検索(IE8 メモリリーク)
- 2 google検索(メモリリーク innerhtml)
- 2 google検索(javascript メモリリーク)
- 2 google検索(createElement リーク)
- 2 google検索(innerhtml メモリリーク)
- 2 google検索(innerHTML)
- 2 google検索(メモリリークパターン)
- 2 google検索(appendChild メモリリーク)
- 2 google検索(javascript null メモリ)
- 2 google検索(innerHTML メモリリーク)
- 2 google検索(javascript innerHTML メモリ)
- 2 google検索(javascript メモリリーク)
- 2 google検索(javascript メモリ)
- 2 google検索(PHP canvas メモリリーク)
- 2 google検索(innerhtml <ul>)
- 2 google検索(IE JavaScript メモリリーク)
- 2 google検索(Memoryleak innerHTML a)
- 2 google検索(t)
- 2 google検索(t)
- 2 google検索(t)
- 2 google検索(t)
- 2 google検索(4h)
- 2 google検索(0h)
- 2 google検索(0h)
- 2 google検索(innerHTML メモリリーク)
- 2 google検索(JavaScript メモリリーク)
