本文為開源書籍《JavaScript 內存調試技巧與泄露分析》第二章節,本書採用「保持署名—非商用」創意共享4.0許可證。如有轉載,請註明作者和出處。
andycall/master-of-javascript-memory?github.com
內存泄露是開發過程中難以發現的一種bug。它經常會變得撲朔迷離,讓開發者抓狂。它並不像代碼異常那樣直接在控制台拋出來,而是靜靜的隱藏在你的代碼中,當你寫的代碼被更多的人使用的時候給予你致命的一擊。
那麼問題來了,我在開發一個應用的時候,該如何確定應用中存在內存泄露?
有的人認為,應用佔用內存很多就一定是內存泄露,這其實是一個錯誤的想法。軟體越複雜,佔用的內存也會越大,這是再也正常不過的事情了。任何系統的代碼,變數,函數都需要佔用內存。開發者有時為了加快軟體運行速度,還會在應用中大量利用緩存技術。緩存的使用,就會佔用一定量的內存,但是緩存和內存泄露的分界線是:緩存不會無限制的佔用內存,而內存泄露會。
雖然大家也都在說該如何寫代碼才能避免內存泄露,但是等你真正寫出內存泄露的時候,你根本毫無察覺。我線下測試好好的,不是嗎?
本節將介紹如何使用Chrome的devtools來發現內存泄露問題,能夠讓你在完成產品功能之後,立刻找出代碼中潛在的內存泄露。
難以發現的泄露
本demo的代碼都可以在github上進行獲取:獲取地址
假如現在有個基於Vue開發的SPA頁面,頁面有2個路由地址,可以自由進行切換。一個頁面只顯示一段文字,而另外一個頁面會實時獲取到瀏覽器框的寬和高。