メモリリークとそれらをクロムdevツールを使用して見つける方法
8313 ワード
メモリリークは非常にアプリケーションで見つけるのは難しいですし、いくつかの予防措置を取ることによってコードを書くの間に回避することができます.すべての開発者は、最も一般的なメモリリークパターンを認識する必要があります.
この記事では、アプリケーションのメモリライフサイクルパターン、メモリリークの最も一般的な原因、およびChromeのDevツールでそれらを識別する方法について説明します.
メモリライフサイクルパターン
メモリライフサイクルパターンでは、コードにいくつかのメモリが割り当てられ、割り当てられたメモリがコードによって使用され、コードが実行されると解放されます.
メモリリークの原因
1 .偶然のグローバル
2 .忘れられたタイマー
あなたはクリアすることができます
ボタンを2つ持っていて、ボタンをクリックすると、DOMからボタン2が取り除かれます.
これを避けるために
クロムdevツールの識別 オープンクロームdevツール あなたのウェブサイトを読み込みます. パフォーマンスパネルの「メモリチェックボックス」を選択し、「再読み込み」アイコンをクリックします. プロファイルとメモリグラフを読み込みます.
メモリグラフの解析
イメージエー
イメージB
あなたはどう思いますか.どのイメージがメモリリークを表しますか?
メモリライフサイクルパターンに従って答えを見つけましょう.
画像Aでは、アプリケーションが起動すると、いくつかのメモリを使用して、それを解放し、この自然は、アプリケーションがロード状態になるまでに従います.最後に、アプリケーションが読み込まれると、グラフは、ほぼ直線とフラット滞在することがわかります.それは、アプリケーションAがアプリケーション実行時間のために予約されたメモリを必要とすると、必要なメモリが一定であることを示します.
一方、画像Bにおいては、メモリグラフは常に最後まで増加しており、これらはステップ機能であり、これらのグラフは時間とともにメモリの増加を表している.
今、イメージBはメモリリークを表していると言える.
この記事を読んで楽しんでください.ハッピーラーニング.
P . S .あなたは、私が記憶グラフを生み出したイメージAのウェブサイトを推測することができますか?
参考文献 Garbage collection in Javascript
setTimeout and setInterval
Chrome Dev Tools Documentaion
この記事では、アプリケーションのメモリライフサイクルパターン、メモリリークの最も一般的な原因、およびChromeのDevツールでそれらを識別する方法について説明します.
メモリライフサイクルパターン
メモリライフサイクルパターンでは、コードにいくつかのメモリが割り当てられ、割り当てられたメモリがコードによって使用され、コードが実行されると解放されます.
メモリリークの原因
1 .偶然のグローバル
non-strict
モードfunction iCauseMemoryLeak() {
temp = 1;
}
ここでは、値をtemp
のスコープで利用できない変数iCauseMemoryLeak
関数.JavaScriptコンパイラは、global
範囲と変数temp
今後はごみ集めではありません.それはあなたのアプリケーションのライフサイクル中に永遠にそこにとどまる.2 .忘れられたタイマー
setTimeout(() => {
/** Perform a task here.. */
}, 1000);
// OR
setInterval(() => {
/** Perform a task here.. */
}, 1000);
タイマーは、タスクを実行するために動的なメモリを割り当てます、そして、タイマーをクリアするのを忘れるならば、それはメモリリークを引き起こします.あなたはクリアすることができます
setTimeout
使用clearTimeout
and setInterval
使用clearInterval
var a = setTimeout(() => {
/** Perform a task here.. */
}, 1000);
clearTimeout(a);
// OR
var b = setInterval(() => {
/** Perform a task here.. */
}, 1000);
clearInterval(b);
DOM操作ボタンを2つ持っていて、ボタンをクリックすると、DOMからボタン2が取り除かれます.
const buttonOne = document.querySelector('#button-a');
const buttonTwo = document.querySelector('#button-b');
buttonOne.addEventListener('click', () => {
document.body.removeChild(buttonTwo);
});
上のコードではbuttonTwo
ドムからクリックbuttonOne
, しかし、我々はbuttonTwo
変数に格納されますbuttonTwo
. この種のメモリリークは非常に危険です.これを避けるために
buttonTwo
インサイドclick
イベントリスナー.const buttonOne = document.querySelector('#button-a');
buttonOne.addEventListener('click', () => {
const buttonTwo = document.querySelector('#button-b');
document.body.removeChild(buttonTwo);
});
ここで、我々はbuttonTwo
をクリックしてDOMからbuttonOne
そしてゴミ集めです.クロムdevツールの識別
メモリグラフの解析
イメージエー
イメージB
あなたはどう思いますか.どのイメージがメモリリークを表しますか?
メモリライフサイクルパターンに従って答えを見つけましょう.
Allocate memory, Use memory and Release memory.
画像Aでは、アプリケーションが起動すると、いくつかのメモリを使用して、それを解放し、この自然は、アプリケーションがロード状態になるまでに従います.最後に、アプリケーションが読み込まれると、グラフは、ほぼ直線とフラット滞在することがわかります.それは、アプリケーションAがアプリケーション実行時間のために予約されたメモリを必要とすると、必要なメモリが一定であることを示します.
一方、画像Bにおいては、メモリグラフは常に最後まで増加しており、これらはステップ機能であり、これらのグラフは時間とともにメモリの増加を表している.
今、イメージBはメモリリークを表していると言える.
この記事を読んで楽しんでください.ハッピーラーニング.
P . S .あなたは、私が記憶グラフを生み出したイメージAのウェブサイトを推測することができますか?
参考文献
setTimeout and setInterval
Reference
この問題について(メモリリークとそれらをクロムdevツールを使用して見つける方法), 我々は、より多くの情報をここで見つけました https://dev.to/ayusharma_/memory-leaks-and-how-to-find-them-using-chrome-dev-tools-2749テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol