2013-03-10 8 views
6

こんにちは、私はゆっくりとクロムの拡張機能を作成しています.HTMLエンティティを含むデータを解析する必要があり、デコードする必要があります。私はそれのためにdocument.createElementを使用することができることを、ここでの回答で見たので、私はこれをしなかった:それはそれを好きではないですので、私は、この関数はバックグラウンドスクリプトで実行されるためdocument.createElementが背後にある要素を離れることを心配しているがdocument.createElementで作成された要素はメモリに残りますか?

htmlDecode: function(input) { 
    if(/[<>]/.test(input)) { // To avoid creating tags like <script> :s 
     return "Invalid Input"; 
    } 
    var e = document.createElement('div'); 
    e.innerHTML = input; 
    return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; 
} 

頻繁にリフレッシュされ、5分ごとに約35000回実行されます。

したがって、document.createElementで作成された要素は解放されますか、それとも残りますか? 私はどこにでもそれらを追加せず、それらはローカル変数に譲渡されていますが、わかりません。

+1

確かに、関数が実行された後は何もdivを参照しないので、最終的にガベージコレクションされます。 – Bergi

答えて

1

ガベージコレクションされます。特に、Chrome拡張機能を開発しているので、V8はこのような一時的なリサイクルを非常に迅速に行う傾向があるため、あまり心配する必要はありません。

これが一般的に心配されている場合、1つの一般的な解決策は、仕事をするために単一の部門を維持することです。

+0

あなたが正しいと思うのですが、作成された要素がドキュメントのどこかに詰まっているかどうかは不思議でした。私はdivを作成しないようにしたいと思っていましたが、文字通り35k回以上呼び出され、おそらくエレメントを作成した後にエレメントを作成する方が、収集されても悪化するため、さらに良いかもしれません。 – Goodwine

+1

パフォーマンスが心配な人は、単一のdivを作成して再利用する方が効率的です。あなたが頻繁に作成すると判断した場合、Chromeがあなたのために準備ができているように、Chromeがスマートになるかもしれないので、私は確かに言えません。 'document.createElement'で要素を作成すると、明示的にそうしなければ文書には追加されませんので、ここで関数が返されるとすぐに0参照が残っていて、それは関数のローカルなので参照されません他の場所では、V8は直ちにIIRCを回収します。 –

関連する問題