2017-06-19 10 views
1

ロード時にdivを切り離し、同じdivをクリックして追加するとメモリが増加するかどうかを知りたいですか? div(画像でいっぱい)を切り離すと、divとimageの情報がメモリに保持されますか?例えばdivを切り離して追加するとメモリが増加しますか?

+0

答えはおそらく、特定のブラウザ/ JSエンジンがそれを処理する方法に100%依存しています。 – CollinD

+2

.detach()メソッドは.detach()が削除された要素に関連付けられたすべてのjQueryデータを保持する点を除いて、.remove()と同じです。このメソッドは、削除された要素が後でDOMに再挿入される場合に便利です。したがって、要素がデタッチされている場合、それらはメモリ内に残っていて、ブラウザの互換性が保たれるまで、DOMに再接続する必要があります。 – Woodrow

答えて

0
<div class="divContain-one"> 
<img src="test.png"> 
</div> 

<div class="divContain-two"></div> 

var divContainingImage = $("#divContain-one").detach(); 

$("button").click(function(){ 
     $("#divContain-two").append(divContainingImage); 
}); 

jqueryのdocumentaionによるが除去要素に関連するすべてのデータを保持方法を切り離します。 から

ので、特にあなたは変数を宣言して割り当てられているという事実を取ってはいは、返されたデータは、それに方法を切り離す - データは間違いなくメモリに保存されています。とにかく、何百、何千という要素について話していないのであれば、このようなメモリの使用は重要ではないことに注意してください。

5

メモリ使用量を大幅に増やすべきではありません。変数には、DOM要素が保持されていた同じメモリへの参照と、関連するjQueryデータが切り離される前の参照が含まれています。 DOM自体がもはやそのメモリへの参照を持っていないということが起こっただけです。

追加すると、メモリを増やすこともありません。同じオブジェクトへの参照をDOM内の新しい場所に追加するだけで、コピーは作成されません。

情報をメモリに保存する必要があります。追加するときにDOMに何を追加するかを知る方法は他にありますか?

注意点:$("#divContainingImage")を呼び出す行為は、DOM要素を囲むjQueryオブジェクトを作成します。変数にはDOM要素だけでなく、このオブジェクトへの参照が含まれます。これは、.detach()とは関係なく、メモリ使用量を増加させます。

+1

この場合、メモリ使用量が重要ではないということは全く同意します。しかし、作者はそれを要素の曖昧な部分に使用しているので、そのような状況でメモリに影響を及ぼすことがあれば興味があります。 –

+2

@タマンゴ(Tamango)彼らが切り離される前に使用したものと同じメモリです。だから、彼がDOMに何百万もの要素を持ち、それらを切り離すならば、メモリは切り離しのために増加しません。しかし、それはGCedからそれらを保つ変数があるので、また減少しない。 – Barmar

0

また、DOMオブジェクトにイベントリスナーが接続されているかどうかを検討する必要があります。

ページからオブジェクトを削除すると、そのオブジェクトへの参照がなくなると、最終的にはメモリをクリーニングすることができます。

aを削除してクリックリスナーがある場合は、メモリに無期限に座って続けることができます。最初にリスナーを削除し、DOMオブジェクトを削除します。そうすれば、最終的にDOMオブジェクトをメモリから削除することができます。

関連する問題