JavaScript のメモリ リークを検出するための Facebook のオープンソース フレームワーク

Facebook (ロシア連邦で禁止されている) は、動的に割り当てられたメモリ (ヒープ) の状態のスライスを分析し、メモリ管理を最適化する戦略を決定し、コードを実行するときに発生するメモリ リークを特定するように設計された memlab ツールキットのソース コードを公開しました。 JavaScript。 コードは MIT ライセンスの下で公開されています。

このフレームワークは、Web サイトや Web アプリケーションを操作するときにメモリ消費量が増加する理由を分析するために作成されました。 たとえば、memlab は Facebook.com Web サイトの新しいバージョンを使用する際のメモリ消費を分析するために使用され、空きメモリの枯渇によるクライアント側でのブラウザのクラッシュにつながるリークを特定することができました。

JavaScript コード実行時のメモリ リークの原因としては、オブジェクトが占有しているメモリをガベージ コレクタが解放できない隠しオブジェクト参照、値の不適切なキャッシュ、または古いリスト要素を削除せずに無限スクロールを実装することが考えられます。 たとえば、Chrome の以下のコードでは、オブジェクト「obj」に null の値が割り当てられているにもかかわらず、メモリ リークが発生します。これは、Chrome が後で Web コンソールで検査できるように出力オブジェクトへの内部参照を保存しているためです。 。 var obj = {}; コンソール.ログ(obj); obj = null;

memlab の主な特徴:

  • ブラウザでのメモリ リークの検出。 Memlab を使用すると、動的メモリ状態スナップショットを自動的に比較し、メモリ リークを検出し、結果を集計できます。
  • ヒープ反復用のオブジェクト指向 API。独自のリーク検出アルゴリズムを実装し、ヒープ状態のスナップショットを分析するシステムを実装できます。 ヒープ分析は、Chromium エンジンをベースとしたブラウザーだけでなく、Node.js、Electron、Hermes プラットフォームでもサポートされています。
  • メモリ使用量を最適化する機会を見つけるためのコマンド ライン インターフェイスと API。
  • Node.js のアサート システム。単体テストを作成し、Node.js に基づいてプログラムを実行して、独自の状態のスライスを作成したり、メモリをテストしたり、拡張アサート チェックを作成したりできます。

出所: オープンネット.ru

コメントを追加します