Mark Ku's Blog

問題

在開發一款網頁前端動畫小遊戲時,因為有自動遊玩功能,發現掛了一晚上,就會發現記憶體飆昇到 1GB 問題。
Chrome DevTools 顯示 JS 堆積與 DOM 節點

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

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

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

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

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

1. Performance Monitor

1.打開 chrome > F12 > More Tool > Performance Monitor Chrome DevTools 點選 More tools 開啟 Chrome 效能監控工具顯示 JS 堆積大小趨勢圖

2. 記憶體快照

打開 chrome > F12 > 記憶體

Chrome DevTools 記憶體快照與效能監控
Chrome DevTools 記憶體快照與效能監控

測試方法

  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,然後掛著測試一晚上,在也沒有飆昇的問題了。

最後

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

作者

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··603

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··440

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··323

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··239

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··222

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取
Mark Ku
··199

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調