1

検索属性がほとんどない単純な検索パネルと結果パネルを備えたアプリケーションを構築しています。結果パネルでは、Slickgridを使用して表形式でデータをレンダリングしています。

数回の検索 (サーバーへの AJAX 呼び出し) の後、ページが大量に読み込まれ、しばらくすると最終的にクラッシュします。メモリ リークの可能性がないか、DOM 数と JavaScript ヒープ使用量を確認しました。そこには何も問題はありませんでした。しかし、実験的なネイティブ メモリ プロファイラを実行したところ、「JavaScript 外部リソース」セクションで 600 MB 以上のメモリが使用されていることがわかりました。ガベージ コレクターを実行すると、数 MB にまで低下します。ここでいくつか質問があります:

  1. 「JavaScript 外部リソース」セクションに貢献するものは何ですか? サーバーから転送されるJSONデータ/JavaScriptソースに対応していると思いました。参考までに、サーバーからの gzip された JSON 応答は ~1MB です。
  2. ページをクラッシュさせるのではなく、Chrome が積極的にメモリを解放しないのはなぜですか? 繰り返しますが、ガベージ コレクターを手動で実行すると、「JavaScript 外部リソース」によって使用されたメモリが解放されます。

元の問題を修正するにはどうすればよいですか?

4

1 に答える 1

1

JS Heap Profiler は JavaScript でオブジェクトのスナップショットを作成しますが、JavaScript コードは "Int8Array"、"Uint8Array"、"Uint8ClampedArray"、"Int16Array"、"Uint16Array"、"Int32Array"、"Uint32Array"、 「Float32Array」と「Float64Array」。そのため、スナップショットを作成すると、ネイティブ メモリ ブロックを指す小さなラッパーのみが作成されます。残念ながら、ヒープ スナップショットは、これらの種類のオブジェクトに使用されたネイティブ メモリに関するデータを提供しません。ネイティブ ヒープ スナップショットはそのメモリをカウントできるため、ページが配列または外部文字列を介してネイティブ メモリを使用していることがわかります。

ページにメモリ リークがないことをどのように確認しましたか? 3 つのスナップショット手法を使用しましたか、それとも特定のオブジェクトをチェックしただけですか? JavaScript メモリ リークを追跡するツール

于 2013-02-13T06:47:24.400 に答える