Mark Ku's Blog
首頁 關於我
前端小遊戲,記憶體洩漏調效筆記 - 1
Frontend
前端小遊戲,記憶體洩漏調效筆記 - 1
Mark Ku
Mark Ku
January 23, 2022
1 min

問題

在開發一款網頁前端動畫小遊戲時,因為有自動遊玩功能,發現掛了一晚上,就會發現記憶體飆昇到 1GB 問題。

那麼在查問題前先了解何謂記憶體洩漏 ( memory leak )

在電腦科學中,內部記憶體泄漏指由於疏忽或錯誤造成程式未能釋放已經不再使用的內部記憶體的情況。 (微基百科)

了解瀏覽器記憶體回收機制

瀏覽器採用的是引用計數,沒有被引用數據,會打出標記,週期性執行,釋放記憶體。

並透過 Chrome 兩種工具來分析記憶體洩漏問題

1. Performance Monitor

1.打開 chrome > F12 > More Tool > Performance Monitor

2. 記憶體快照

打開 chrome > F12 > 記憶體

測試方法

  1. 重整幾次,觀察記憶體會不會降下來(有沒有被釋放)。
  2. 長時間掛著,看記憶體會不會成長。
  3. Keep alive 和非 keep alive 做對比
  4. 可過記憶體快照來分析,那些 JS 持續著成長。

主要參考這篇常見記憶體洩漏的去做調整

連結

最後我做了兩個調整

1. 自訂元件在掛載 Lottie-web 動畫套件,在消滅前( v-if ),手動執行 destory

beforeDestroy () {
this.lottieAnimation.destroy('game-animation')
this.lottieAnimation = null
this.lottieApi = null
}

2. 因為 Vue keep-alive 僅能暴力移除快取,最後決定移除 Vue 的 keep-alive,平均記憶體的就降了30 MB,然後掛著測試一晚上,在也沒有飆昇的問題了。

最後

記憶體掛一個晚上終於沒有在飆昇了。


Tags

Mark Ku

Mark Ku

Software Developer

8年以上豐富網站開發經驗,直播系統、POS系統、電子商務、平台網站、SEO、金流串接、DevOps、Infra 出身,帶過幾次團隊,目前專注於北美及德國市場電商網站開發團隊。

Expertise

前端(React)
後端(C#)
網路管理
DevOps
溝通
領導

Social Media

facebook github website

Related Posts

免費開源的A/B測試解決方案 - Featureprobe
免費開源的A/B測試解決方案 - Featureprobe
March 09, 2024
1 min

Quick Links

關於我

Social Media