2025-03-01-當我 URL.createObjectURL(...) 後,如果**沒有呼叫 URL.revokeObjectURL(...)釋放記憶體**,會發生什麼事?
2025-03-01-當我 URL.createObjectURL(…) 後,如果沒有呼叫 URL.revokeObjectURL(…)釋放記憶體,會發生什麼事?
你問的是:
當我
URL.createObjectURL(...)
後,如果沒有呼叫URL.revokeObjectURL(...)
釋放記憶體,會發生什麼事?
🔍 答案:
如果你**沒有呼叫 URL.revokeObjectURL()
**:
✅ 程式仍然能正常執行,不會立即報錯。
❗️這個 URL 會一直佔用記憶體中的一段暫存空間(Blob 資料)。
🧠 如果你 頻繁建立新的 Blob URLs 而不釋放它們,就會:
- 增加記憶體使用量(memory leak)
- 造成 瀏覽器效能變差,甚至卡頓或崩潰
- 特別在長時間執行的 SPA(如 Vue、React 應用)或遊戲中更嚴重
🧪 小比喻:
就像你拿到一瓶飲料(Blob URL
),喝完了,但不丟垃圾桶(不呼叫 revokeObjectURL()
),堆久了,桌上就亂七八糟,桌面越來越擠,最後你自己沒地方用。
✅ 建議用法:
1 | const url = URL.createObjectURL(blob) |
👉 通常你在 a.click()
下載後立即釋放即可。
🧠 小結:
問題 | 結果 |
---|---|
不呼叫 revokeObjectURL() |
程式可跑,但記憶體可能會累積泄漏 |
呼叫 revokeObjectURL() |
釋放記憶體,最佳實務,推薦 ✅ |
如你要開發一個需要常常建立暫存檔案 URL 的應用(例如:多圖上傳預覽、CSV 下載等),一定要養成 revokeObjectURL()
的習慣!