2011-06-25 24 views
5

この質問は以前に尋ねられたことは知っていますが、私はjavascript経由でDOMの要素を更新するAJAX Webページをテストしています。JavaScriptを使用してDOMを更新するとメモリリークが発生する(Firefoxのみ)

毎分、サーバーに新しいデータが問い合わせられ、それに従ってDOMが更新されます。私が知る限り、Chromeのこのページのメモリ使用量は増えますが、それほど多くはありません(約40 MBから始まり、おそらく最大80 MBに達する)。ただし、Firefoxではメモリ使用量が120 MB前後から400 MB以上に拡大されます。私はFirebugを使ってJavascriptを踏んできました.JavascriptメソッドでDOMが更新されたときに、メモリが最も大きくなるようです。

var myTable = document.createElement("table"); 

var thead = document.createElement("thead"); 
var tr = document.createElement("tr"); 
var th = document.createElement("th"); 
th.appendChild(document.createTextNode("column1")); 
tr.appendChild(th); 

for(var test in obj.testObjs){ 
    th = document.createElement("th"); 
    th.appendChild(document.createTextNode(obj.testObjs[test].myVar)); 
    tr.appendChild(th); 
} 

DOM内のノードに新しいデータを追加する前に、私が最初に既存のデータをクリア:

DOM操作は、次のような、シンプルです。私はここに記載されたものを含めて、いくつかの方法を、試してみた:How to remove DOM elements without memory leaks?

としてだけでなく、のような簡単な方法:私も読んだ

function clearChildren(node){ 
    if(node != null){ 
     while (node.hasChildNodes()) node.removeChild(node.firstChild); 
    } 
} 

Cyclic adding/removing of DOM nodes causes memory leaks in JavaScript?)ブラウザのみごみの収集を開始することをそれは一定のレベルに達したら?それは確認できますか?メモリが増えているので、しばらくして私のPCが低速で動作しているように感じます。

同じ機能的なステップを実行した商用サイトではメモリ使用量が増えることはないため、これに対する解決策が必要だと感じました。

ご協力いただければ幸いです。

ありがとうございます。

答えて

2
innerHTML='' 

は、GC処理のため変数を用意に間違った方法です。
要素とこの要素が参照するすべての要素に対してdelete関数を使用する必要があります。
たくさんありますか?
私たちのために書かれたJSライブラリを持っているのはそのためです。私はMootoolsのコードをチェックし(をダウンロードしてを破棄してください)、正しく書かれているようです。
他のライブラリでも同じようになると思います。

+0

応答ありがとう - MootoolsはJQueryに干渉しますか?私は自分のサイトでJQueryを使用していましたが、Mootools destroy()関数を使用しようとするとJSエラーが発生しました。 "destroy()は関数ではありません" – user172092

+0

一緒に再生するには、彼らはうまくやっている私のサイト)。同様に、Mootools依存コードで '$'を使う代わりに、 'document.id( 'セレクタ...)を使う必要があります。') ' –

+0

ありがとうございます - メモリ使用量が絶え間なく増えているようですが、時々縮小しているようです。私はあなたの助けに感謝します。 – user172092

3

これは確認できますか?

によって異なります。

一般に、ブラウザーは気に入ったらGCを行い、経験則はかなり頻繁に変わる可能性があります。私はあなたがFirefoxの夜間を試してみると、あなたが上で説明したものとはかなり違った振る舞いを見せるだろうと思う。 Firefox 5リリース以来、少なくとも2つのGC経験則の変更がありました。

+0

FFのバージョンは何ですか?私はトラックを失った –

+0

Firefox 5は現在の安定版です。 6は8月中旬に予定されています。 –

関連する問題