2009-06-27 7 views
7

私は、remove()関数を使用すると、一致した要素はjQueryオブジェクトから削除されず、DOMだけが削除されることを発見しました。 remove() documentationによると

は DOMから、一致したすべての要素を削除します。これは のjQueryオブジェクトから削除されず、 の要素をさらに使用できます。

ウェブアプリケーションがDOMに要素を追加したり削除したりしている場合は、これ以上メモリが使用され続けますか?これが事実かどうか誰かが確認できますか?これを避けるために何ができますか?

答えて

7

に育てられたようでした。過度のメモリ使用に問題がある場合は、返されたオブジェクトに対してdelete演算子を使用してみてください。

+0

はい。 DOMは変更されていますが、jQueryオブジェクトは変更されていません。変数にjQueryオブジェクトを割り当てた場合、ガベージコレクタはスコープから外れたときにその変数にショットする必要があります。 – Nosredna

2

私はちょっとしたテストをして自分の質問に対する答えを見つけようとしました。 delete operator(tvanfossonの提案のおかげで)

var test = $('#test_'+($i-1)).remove(); 

をしてと::

<script type="text/javascript"> 
$(document).ready(function() { 
    for ($i=1; $i<10000; $i++) { 
     $('table').append("<tr id=\"test_" + $i + "\"><td>test " + $i + "</td></tr>"); 
     $('#test_'+($i-1)).remove(); 
    } 
}); 
</script> 
<table> 
    <tr><td id="test_0">test 0</td></tr> 
</table> 

は、私が使用して削除()のバリエーションをした

var test = $('#test_'+($i-1)).remove(); 
delete test 

は、これらのテストをやった私はまだだろう単にremove()を使用してください。そのページをリロードした後にブラウザのメモリ使用量が常に増加したため、メモリリークがあったかどうかを知ることは非常に難しいです。他の誰かが、コードを別の方法でテストすることによって、より決定的な答えを提供する可能性があります。

関連する問題