我幫系統織的安全網,反而先把系統坑了一把
這篇在講什麼?
- 工地照片直接塞進瀏覽器有限的儲存空間,滿了會默默寫入失敗,沒人知道。
- 我加的備份本來要防資料不見,卻把同一批照片複製三十份,最快榨乾容量。
- 解法不是加警告燈,是把照片整批搬出這個天生撐不住的地方。
照片存進 localStorage,滿了為什麼沒人發現?
永亨工程的排班系統把工地照片用 base64 塞進 localStorage。容量一超標,瀏覽器丟出 QuotaExceededError,程式抓到後只印一行 console log。畫面照常顯示正常,那筆資料其實沒寫進去。我把這叫「隱形滿版」:滿了,但沒有人會被通知。
為什麼備份越勤快,容量爆得越快?
系統定期全量備份、最多留三十份,內嵌的照片整包複製進去。同一批照片在五 MB 空間裡最多疊三十份副本。本來要防資料遺失的保險,反而把爆容量的風險乘大三十倍,成了「備份倍增器」。
以為
備份是保險,防的是資料不見。
實際
每份備份原樣複製整包照片,五 MB 空間被同一批照片疊了三十次,保險自己引爆容量。
怎麼修
照片整批搬進 IndexedDB 單獨存放,日誌只留參照;備份前先剝掉照片欄位;寫入失敗改成畫面上留著不走的提示;健檢頁直接顯示每項用量。
「備份要先把照片剝乾淨,不然每次備份都是在往同一個已經很緊繃的氣球裡打氣。」
Claude協作審查做備份機制前我會先問:這份複製,會不會把緊繃的資源乘上複製次數一起榨乾。
延伸理解
localStorage 滿了會發生什麼事?
瀏覽器會丟出 QuotaExceededError。如果程式抓到錯誤後只印一行 console log,畫面看起來一切正常,但那筆資料完全沒寫進去,也不會有人發現。
為什麼備份機制反而把問題放大?
因為備份是全量複製、不挑內容,內嵌在日誌裡的照片跟著每一份備份被複製一次。保留三十份備份,等於同一批照片在五 MB 的空間裡疊三十次。
只加容量監控警告,為什麼不夠?
加了監控,寫入失敗還是會發生,只是從「靜默」變成「有告警」。真正的解法是把大體積資料搬出這個容量受限的儲存層,例如交給 IndexedDB 單獨存放。
本篇由 AI 彙整初稿,人工審定。
