JQueryを使用するスクリプトがいくつかありますが、そのうちの1つでメモリリークが発生していると思います。
私が持っているスクリプトのどの部分が最も多くのメモリ/ CPUを使用しているかをどのようにプロファイリングして見つけることができますか?
メモリ消費について
JavaScriptのメモリリークは、ブラウザのメモリリークに変わる場合を除いて、通常は無視されます(つまり、ユーザーがページから移動した後でも、メモリは割り当てられたままであり、解放する方法はありません)。これは、Webアプリケーションでメモリリークが発生する可能性がある一方で、ユーザーが1つのページから別のページに移動するため、リークが最小限に抑えられるためです。ただし、ブラウザを再起動しない可能性があるため、ブラウザのメモリリークが深刻になる可能性があります。一部のJavaScriptコードは、特定のブラウザでメモリリークを引き起こすことが知られており、InternetExplorerはおそらくこの分野で最悪です。そのため、 Microsoft JavaScriptメモリリークディテクタ が非常に便利であることがわかります。
時間について
IE、ChromeおよびSafariには、ブラウザに付属のWeb開発ツールにプロファイラーが組み込まれています。Firefoxの場合はFirebugを使用できます。jQueryを使用しているため、便利な場合もあります。プロファイリングレポートは匿名の関数などで埋められ、非常に読みにくくなります John ResigのjQueryプロファイリングプラグイン これにより、問題に関するより明確な出力が得られます。
Firebug を使用します。 http://getfirebug.com/js.html から引用するには:
プロファイラーを使用するには、[コンソール]タブに移動し、[プロファイル]ボタンをクリックします。次に、アプリを少し使用するか、ページをリロードしてから、[プロファイル]ボタンをもう一度クリックします。次に、呼び出された関数と各関数にかかった時間を示す詳細なレポートが表示されます。
Firebug のプロファイラーとIE)の Drip プラグインを見て、メモリリークを探すことをお勧めします。
また、ほとんどのjavascriptメモリリークは、DOMオブジェクトと、DOMオブジェクトがアンロードされたときに壊れていないjavascriptオブジェクトとの間の循環参照に起因することに注意してください。これを防ぐには、DOMオブジェクトプロパティでjavascriptオブジェクトへの参照を作成しないようにすることをお勧めします(つまり、document.getElementById('foo').bar = myObject;
のようなものは避けてください)。これらの循環参照を作成する必要がある場合は、ページのアンロード時、またはアンロード前にDOMオブジェクトを削除するときに実行される関数でそれらを必ず分割してください。
Google Chromeにはプロファイルオプションもあります
chromeにはプロファイリングオプションが組み込まれていますが、オブジェクトに関する正確な情報は提供されません。そのため、コードで役立つLeak-Finder-for-javascriptツールを使用することをお勧めします。
https://code.google.com/p/leak-Finder-for-javascript/
これがお役に立てば幸いです。
特定のコードをテストするもう1つの簡単な方法は、その周りにタイマーを追加することです。
var testStart = new Date();
// code to be tested here
$('#jstest').html("selected function: "+ (new Date() - testStart) + " milliseconds");
Jstestは、ページのどこかに表示されるスパン要素です。
FirebugまたはGoogleのFirefox用ページスピードにはプロファイリングツールがあります。
John Resig(jQuery)によるこの投稿は、IEのメモリリークを検出するのに役立つ可能性があります。