永久儲存空間

持續性儲存空間可協助保護重要資料免於遭到清除,並降低資料遺失的風險。

面臨儲存空間壓力 (例如磁碟空間不足) 時,瀏覽器通常會清除資料,包括來自 Cache API 和 IndexedDB 的資料,並從最近最少使用的來源開始清除。如果應用程式尚未與伺服器同步處理資料,這麼做可能會導致資料遺失,而且移除應用程式運作所需的資源會降低應用程式的可靠性,這兩者都會導致使用者體驗不佳。

幸好,Chrome 團隊的研究顯示,Chrome 很少會自動清除資料。使用者手動清除儲存空間的情況更為常見。因此,如果使用者經常造訪您的網站,資料遭到清除的機率很小。如要防止瀏覽器刪除資料,可以要求將整個網站的儲存空間標示為永久儲存。

許多新式瀏覽器都支援永久儲存空間。

Browser Support

  • Chrome: 55.
  • Edge: 79.
  • Firefox: 57.
  • Safari: 15.2.

Source

如要進一步瞭解清除作業、可儲存的資料量,以及如何處理配額限制,請參閱「網頁儲存空間」。

檢查網站的儲存空間是否已標示為持續性

您可以使用 JavaScript 判斷網站的儲存空間是否已標示為持續性。呼叫 navigator.storage.persisted() 會傳回 Promise,並以布林值解析,指出儲存空間是否已標示為持續性。

// Check if site's storage has been marked as persistent
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persisted();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

何時該要求永久儲存空間?

要求將儲存空間標示為持續性儲存空間的最佳時機,是儲存重要使用者資料時,且要求最好包裝在使用者手勢中。請勿在載入網頁時或在其他啟動程式碼中要求永久儲存空間,否則瀏覽器可能會提示使用者授予權限。如果使用者認為自己沒有需要儲存的內容,系統顯示的提示可能會造成困擾,他們很可能會拒絕要求。此外,請勿過於頻繁地提示。如果使用者決定不授予權限,請勿在下次儲存時立即再次提示。

要求永久儲存空間

如要為網站資料要求永久儲存空間,請呼叫 navigator.storage.persist()。這個方法會傳回 Promise,並以布林值解析,指出是否已授予永久儲存空間權限。

// Request persistent storage for site
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persist();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

如何授予權限?

永久儲存空間會視為權限。瀏覽器會根據不同因素,決定是否授予永久儲存空間權限。

Chrome 和其他以 Chromium 為基礎的瀏覽器

Chrome 和大多數其他以 Chromium 為基礎的瀏覽器會自動處理權限要求,不會向使用者顯示任何提示。如果網站被視為重要,系統會自動授予永久儲存空間權限,否則會自動拒絕。

判斷網站是否重要的經驗法則包括:

  • 網站參與度有多高?
  • 網站是否已安裝或加入書籤?
  • 網站是否已獲准顯示通知?

如果要求遭拒,稍後可以再次提出,系統會使用相同的啟發式方法評估要求。

Firefox

Firefox 會將權限要求委派給使用者。要求永久儲存空間時,系統會顯示 UI 彈出式視窗,詢問使用者是否允許網站將資料儲存在永久儲存空間。

網站要求永久儲存空間時,Firefox 顯示的彈出式視窗。
網站要求永久儲存空間時,Firefox 顯示的彈出式視窗。

永久儲存空間可保護哪些儲存空間?

如果授予永久儲存空間權限,瀏覽器就不會清除儲存在下列位置的資料:

  • Cache API
  • Cookie
  • DOM 儲存空間 (本機儲存空間)
  • File System API (瀏覽器提供的沙箱檔案系統)
  • IndexedDB
  • Service Worker
  • 應用程式快取 (已淘汰,請勿使用)
  • WebSQL (已淘汰,請勿使用)

如何關閉永久儲存空間

目前無法透過程式輔助方式告知瀏覽器您不再需要永久儲存空間。

結論

Chrome 團隊的研究顯示,雖然 Chrome 可能會自動清除儲存的資料,但這種情況很少發生。為保護可能未儲存在雲端或會導致大量資料遺失的重要資料,永久儲存空間可確保本機裝置面臨儲存空間壓力時,瀏覽器不會移除資料。請注意,只有在使用者最可能需要時,才要求永久儲存空間。

謝謝

特別感謝 Victor Costan 和 Joe Medley 審查這份文件。 感謝 Chris Wilson 撰寫這份文件的原始版本,該版本最初發布於 WebFundamentals。