[web] 記憶體問題 memory leak
keywords: memory leaks
, memory bloat
, garbage collection
- 👍 Causes of Memory Leaks in JavaScript and How to Avoid Them @ Joy Hung
- Node.js Debugging Guide @ node.js
- Introducing the Memory Inspector @ Chrome Developer
- Monitor your web page's total memory usage with
measureMemory()
@ web.dev- Fix Memory Problems @ Google Developers
- Debugging memory leaks - HTTP 203 @ HTTP203
- 從你的 Node.js 專案裡找出 Memory leak,及早發現、及早治療!
TL;DR
- 使用 Chrome DevTool 頁籤中的 memory panel 查看記憶體使用情況
- 點擊「Take heap snapshot」可以擷取當下記憶使用的快照,隔一陣子或進行某些操作後,再次點擊,可以比較兩次的差異
- 一般我們要看的是 retained size 的這個欄位
什麼是記憶體洩漏問題?
JavaScript 的 GC 會在沒有任何地方參照到「這個東西」時,把它們回收。在前端開發時常出現的記憶體問題包含記憶體洩漏(memory leaks)、記憶體膨脹(memory bloat)和過度的垃圾回收(frequent garbage collection)。
導致記憶體洩漏的常見原因包含:
- 不當的建立變數並使其不斷膨脹,例如,定義全域變數、在 module 或 closure 中定義變數,但不斷塞入內容而沒有主動清除(設成
null
)。 - 忘記解除 event listener 的註冊。Event Listener 中的 event handler 函式會被移除的時間包含: