6

次の HTML ページを検討してください。

http://jsbin.com/aYUcelo/1/ (すべての jsbin ノイズを取り除くためにダウンロードすることをお勧めします)。

GO ボタンをクリックすると、ボディに div が追加されます。RM は div の 1 つを削除します。また、次の 2 つのスタイルのいずれかを新しい div に適用します。

newDiv.style.color = "red";
// or
newDiv.style.WebkitTransform = "translate3d(0px, 0px, 0px)";

WebkitTransform が適用されている場合、Chrome 開発ツールのメモリ タイムラインでノード数が増え続けていることがわかります。GC は削除できません。これは、カラー レッド スタイルでは発生しません。

編集:「赤いスタイル」を適用することを明確にするために、divを追加および削除する操作はノード数と同等です。

この動作の理由は何ですか? 私は要点を逃していますか?DOMノードリークすらありませんか?

ここでは、2 つのタイムライン レコードを見つけることが できます

両方のレコードで、3 つの div が連続して追加および削除され、最後に GC が要求されます。参考までに、私はより複雑なAngularアプリを持っていますが、同じ問題のメモリリークを突き止めることができます. とにかく、この簡単な例を作成しました。

編集: タイムライン レコードの 2 つの画像: https://docs.google.com/file/d/0B9S6doraVaWXMURzMjdhMWI0UDA https://docs.google.com/file/d/0B9S6doraVaWXWGhwVWhlMjN4dkE

編集 2: Windows 8 / Chrome 30.0.1599.69 m の実行

4

1 に答える 1

0

たまたま Visual Studio 2013 を使用していませんか? その場合は、ネットワーク パネルをチェックして、XHR アクティビティとメモリ内の不規則なオブジェクト操作の間に相関関係があるかどうかを確認してください。これは、Visual Studio 2013 が signalR ブラウザー モニターと統合されており、プロジェクトを展開するブラウザーでプロジェクトをテストしている間に実行されるためです。

于 2013-11-14T18:08:22.077 に答える