私はかなり複雑な Javascript アプリを持っています。このアプリには、毎秒 60 回呼び出されるメイン ループがあります。多くのガベージ コレクションが行われているようです (Chrome 開発ツールのメモリ タイムラインからの「のこぎり」出力に基づく) - これは、アプリケーションのパフォーマンスに影響を与えることがよくあります。
そこで、ガベージ コレクターの作業量を減らすためのベスト プラクティスを調査しようとしています。(私が Web で見つけた情報のほとんどは、メモリ リークの回避に関するものです。これは少し異なる質問です。メモリが解放されつつあります。ガベージ コレクションが多すぎるためです。)これは主にオブジェクトを可能な限り再利用することに帰着しますが、もちろん悪魔は細部に宿っています。
このアプリは、 John Resig の Simple JavaScript Inheritanceに沿った「クラス」で構成されています。
1 つの問題は、一部の関数が 1 秒間に何千回も呼び出される可能性があること (メイン ループの各反復中に何百回も使用されるため) であり、おそらくこれらの関数のローカル作業変数 (文字列、配列など) です。問題かもしれません。
私はより大きな/より重いオブジェクトのオブジェクトプーリングを認識しています (そして私たちはこれをある程度使用しています) が、特にタイトなループで非常に何度も呼び出される関数に関連して、全面的に適用できるテクニックを探しています.
ガベージ コレクターが実行しなければならない作業量を減らすために、どのような手法を使用できますか?
また、ガベージ コレクションが最も頻繁に行われているオブジェクトを特定するには、どのような手法を使用できるでしょうか。(これは非常に大きなコードベースであるため、ヒープのスナップショットを比較してもあまり効果がありません)