永久儲存空間

永久儲存空間有助於防止重要資料遭到剔除,並降低資料遺失的可能性。

當儲存空間壓力 (例如磁碟空間不足) 時,瀏覽器通常會從最近最少使用的來源移除資料,包括 Cache API 和 IndexedDB 的資料。如果應用程式未與伺服器同步資料,可能會導致資料遺失,並移除應用程式正常運作所需的資源,藉此降低應用程式的可靠性,這兩種做法都會造成不良的使用者體驗。

幸好,Chrome 團隊的研究顯示,Chrome 很少自動清除資料。使用者較常手動清除儲存空間。因此,如果使用者定期造訪您的網站,就不太可能會移除您的資料。為避免瀏覽器刪除您的資料,您可以要求將整個網站的儲存空間標示為永久儲存空間。

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

瀏覽器支援

  • 55
  • 79
  • 57
  • 15.2

來源

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

檢查網站儲存空間是否已標示為永久儲存空間

您可以利用 JavaScript 判斷網站儲存空間是否已標示為永久儲存空間。呼叫 navigator.storage.persisted() 會傳回 Promise,該 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}`);
}

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

要求將儲存空間標示為永久性的最佳時機就是儲存重要使用者資料時,而且要求最好納入使用者手勢中。請勿在載入網頁時要求永久儲存空間;在其他 Bootstrap 程式碼中,瀏覽器可能會提示使用者授予權限。如果使用者未執行任何認為需要儲存的行為,提示可能會令人困惑,甚至拒絕要求。此外,不要頻繁提示如果使用者決定不授予權限,下次儲存時,不要立即顯示提示。

要求永久儲存空間

如要要求永久儲存網站資料,請呼叫 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 顯示的彈出式視窗。

哪個儲存空間受到永久儲存空間保護?

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

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

如何關閉永久儲存空間

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

結論

Chrome 團隊的研究顯示,雖然情況允許,Chrome 鮮少自動清除儲存的資料。如要保護可能無法儲存在雲端的重要資料,或可能導致大量資料遺失,永久儲存空間是一項實用的工具,確保本機裝置面臨儲存空間壓力時,不會移除瀏覽器中的資料。提醒您,請只在使用者最可能要求時,才要求永久儲存空間。

謝謝

在此特別感謝 Victor Costan 和 Joe Medley 撰寫這篇文章。 感謝 Chris Wilson,撰寫本文的原版文章,首次出現在 WebFundamentals。

由 Umberto 在 Unsplash 上提供的主頁橫幅