62

Chrome でヒープ プロファイラーを使用するのに苦労しましたが、非常に混乱しています。特に、最小化されたライブラリが内部にある場合。しかし、DOMElements ビューでさえ、削除できない可能性のある要素は非常に不明確に表示されます。

Chrome でヒープ ダンプを使用して、メモリ リークの原因となる JS コード、GC でクリーニングできないコードを見つける方法、および dom から削除された場合でも混乱している要素を見つける方法のヒントはありますか?

つまり、クロムでヒープダンプを正しく読み取る方法は? ドミネータービュー? 比較?

4

7 に答える 7

28

Chrome 開発者ツールには、タイムライン - メモリ タブがあります。

ここに画像の説明を入力

それによって占有されているメモリを見ることができます。

Profiles - Memory もあり、スナップショットを作成して中身を確認できます。スナップショットは互いに比較できます。

ここに画像の説明を入力

ほとんどの場合、何も教えてくれません。しかし、少なくとも、どのオブジェクトが積み重なっているか、おそらくリークの構造を確認できます。

ここで使用する他の方法は'Task Manager' 、これに関する記事です。

http://www.javascriptkit.com/javatutors/closuresleak/

于 2013-04-12T11:55:43.380 に答える
20

Google は、この目的のためのツール、leak-finder-for-javascript をオープンソース化しました。彼らはまた、いわゆる3 つのスナップショット手法(この記事の簡単な説明も参照してください) と呼ばれる方法を提案しました。

リークファインダーリンクの最初の段落

注: jsleakcheck はサポートされなくなりました。これは、ヒープ スナップショットを取得するための非公式で不安定な Dev Tools プロトコルに対して機能していました。プロトコルは現在開発中ですが、Chrome のさまざまなバージョンで jsleakcheck を動作させ続けるには十分な安定性がありません。さらに、jsleakcheck が Dev Tools との通信に使用していた下位レベルの互換性ツールである remote_inspector_client.py が削除されました。

于 2013-04-12T11:51:54.870 に答える
3

JavaScriptキットから引用:

クライアント側で再利用可能なスクリプト オブジェクトを開発している場合、遅かれ早かれメモリ リークを発見することになります。ブラウザがスポンジのようにメモリを消費する可能性があり、サイト内のいくつかのページにアクセスした後、素敵な DHTML ナビゲーションの応答性が大幅に低下する理由をほとんど見つけることができません。

Microsoft の開発者である Justin Rogers は、IE のリーク パターンについて、彼の優れた記事(web.archive.org から) で説明しています。

この記事では、少し異なる観点からこれらのパターンを確認し、図とメモリ使用率のグラフでそれをサポートします。また、いくつかの微妙なリーク シナリオも紹介します。始める前に、まだ読んでいない場合は、その記事を読むことを強くお勧めします。

なぜメモリリークが発生するのですか?

メモリ リークの問題は、Internet Explorer に限ったことではありません。ほとんどすべてのブラウザー (Mozilla、Netscape、Opera を含むがこれらに限定されない) は、適切な条件を指定するとメモリ リークを起こします (後で説明するように、そうするのはそれほど難しくありません)。しかし (私の謙虚な意見では、ymmv など) Internet Explorer はリーカーの王様です。

誤解しないでください。私は、「ねえ IE にはメモリ リークがあります。この新しいツール [link-to-tool] をチェックして、自分の目で確かめてください」と叫ぶ群集には属していません。Internet Explorer がいかにくだらないかを議論し、他のブラウザのすべての欠陥を隠蔽しましょう。」

各ブラウザには、独自の長所と短所があります。たとえば、Mozilla は最初の起動時に大量のメモリを消費します。文字列や配列の操作には適していません。レンダリング エンジンを混乱させる非常に複雑な DHTML スクリプトを記述すると、Opera がクラッシュする可能性があります。

Internet Explorer でのメモリ リーク状況に焦点を当てますが、この説明は他のブラウザにも同様に当てはまります。

読み続けて...

于 2015-08-05T05:36:10.667 に答える
2

Google Developer Tools を使用してメモリ リークを見つける方法についての非常に良い投稿を次に示します: http://gent.ilcore.com/2011/08/finding-memory-leaks.html

これに関する別の優れた Web ページがあります: http://javascript.crockford.com/memory/leak.html

于 2013-04-12T11:47:46.653 に答える