Chrome 中的新最佳化功能可改善 IndexedDB 資料儲存在磁碟上的方式。這項強化功能著重於如何在 Chrome 的儲存系統中管理大型值,特別是針對儲存在磁碟上的特定檔案導入壓縮功能。本文將摘要說明這次更新的重點。
Chrome 129 以下版本的儲存機制
Chrome 會使用 LevelDB 在磁碟上儲存 IndexedDB 資料。LevelDB 是快速的鍵/值儲存庫程式庫,但當個別值超過資料庫頁面大小時,就會遇到困難。為解決這個問題,自 2017 年起,Chrome 會將大於單一頁面的值儲存為純文字檔案,並與資料庫檔案一同儲存在磁碟上。
自 129 版起的儲存空間
壓縮大型值
與直接儲存在 LevelDB 資料庫中的內容不同,這類內容會在寫入磁碟前進行壓縮,並在讀取後解壓縮,但儲存為純文字檔案的大型檔案則不會壓縮。在新的更新中,Chrome 會使用 Snappy 即時壓縮程式庫壓縮這些大型檔案,大幅節省空間。這項功能對於結構化資料 (例如大量的 JavaScript 值陣列、XML 或 JSON) 尤其有效。對於已壓縮的大型媒體檔案,或較少見的情況,如果網站已自行執行壓縮和解壓縮作業,這項做法就沒有效果。
對儲存空間效率的影響
如果壓縮後的檔案大小低於 LevelDB 頁面大小,系統會將資料移回 LevelDB。這項變更不僅可節省空間,還能減少磁碟 I/O 作業,進而提升整體效能。
Snappy 壓縮演算法
Chrome 團隊選擇使用 Snappy 進行壓縮,是因為這項工具會優化速度,而非最大壓縮率。速度夠快,在壓縮或解壓縮時不會造成任何可測量的效能損失。
提升執行效能
壓縮和解壓縮作業會在轉譯器程序中處理,這是 Chrome 多程序架構的一部分。這樣一來,傳送至瀏覽器程序的訊息大小就會縮小,進而進一步改善效能。模擬基準測試顯示,由於減少了 IPC (處理序間通訊) 和磁碟 I/O,此更新可讓某些作業的速度提高兩到三倍。實際上,根據 Chrome 團隊的測量結果,1 MB 的結構化資料酬載從磁碟傳送到網頁的時間約為四分之一 (這會因裝置硬體和系統活動而有很大的差異)。
對開發人員和使用者的影響
開發人員和使用者都能完全瞭解這些變更。不過,使用者可能會發現效能提升,且儲存空間用量減少。
- 節省空間:壓縮功能只會套用至這次更新後儲存的新資料。您可以使用
navigator.storage.estimate()
等網路 API 間接觀察節省的空間,也可以在 Chrome 開發人員工具的「應用程式」面板下方的「儲存空間」部分查看。 - 測試功能:開發人員可以使用旗標
--enable-features="IndexedDBCompressValuesWithSnappy"
啟用這項功能,在 Chrome 預先發布版本 (129 版之前) 中測試這項功能。
這項更新可提升 Chrome 管理大型 IndexedDB 值的效率,在不影響效能的情況下節省空間和時間,大幅改善瀏覽器儲存及存取資料的方式。開發人員只要瞭解這些異動,就能持續改善 Chrome 的效能和儲存機制,提供更順暢、更有效率的使用者體驗。
特別銘謝
本文件由 Evan Stade 和 Rachel Andrew 審查。