Storage API

Baseline 廣泛可用 *

此功能已成熟,可在多種裝置和瀏覽器版本上使用。自 2021 年 12 月以來,它已在所有瀏覽器中可用。

* 此特性的某些部分可能存在不同級別的支援。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

Storage 標準定義了一個共享儲存系統,旨在供網站用來在使用者瀏覽器中儲存資料的各種 API 和技術使用。

由 Storage 標準管理的網站資料通常包括 IndexedDB 資料庫Cache API 資料,但也可能包含其他型別的網站可訪問資料,例如 Web Storage API 資料

Storage API 使網站能夠了解它們可以使用多少空間,已經使用了多少空間,甚至可以控制是否需要在 使用者代理 清理資料以騰出空間時收到提醒。

本文概述了使用者代理儲存和維護網站資料的方式。有關儲存限制和清除的更多資訊,請參閱 瀏覽器儲存配額和清除標準

本文還概述了用於估算網站可用儲存的 StorageManager 介面。

概念與用法

儲存桶

Storage 標準所描述的、用於儲存網站資料的儲存系統通常為每個 包含一個單獨的儲存桶

本質上,每個網站都有自己的儲存空間用於存放其資料。但在某些情況下,使用者代理可能會決定將單個源的資料儲存在多個不同的儲存桶中,例如當此源嵌入在不同的第三方源中時。

要了解更多資訊,請參閱 瀏覽器如何區分來自不同網站的資料?

儲存桶模式

每個網站儲存桶都有一個模式,該模式描述了該儲存桶的資料保留策略。有兩種模式:

"best-effort"(盡力而為)

使用者代理將盡可能長時間地保留儲存桶中的資料,但如果儲存空間不足且為了緩解儲存壓力需要清空儲存桶,則不會向用戶發出警告

"persistent"(持久)

使用者代理將盡可能長時間地保留資料,在考慮清空標記為"persistent"的儲存桶之前,會先清空所有"best-effort"儲存桶。如果需要考慮清空持久儲存桶,使用者代理將通知使用者並提供一種按需清空一個或多個持久儲存桶的方式。

您可以使用 navigator.storage.persist() 方法來更改源的儲存桶模式,該方法需要"persistent-storage" 使用者許可權

js
if (navigator.storage && navigator.storage.persist) {
  navigator.storage.persist().then((persistent) => {
    if (persistent) {
      console.log("Storage will not be cleared except by explicit user action");
    } else {
      console.log("Storage may be cleared by the UA under storage pressure.");
    }
  });
}

您還可以使用 navigator.storage.persisted() 方法來了解源的儲存是否為持久儲存。

js
if (navigator.storage && navigator.storage.persist) {
  navigator.storage.persisted().then((persistent) => {
    if (persistent) {
      console.log("Storage will not be cleared except by explicit user action");
    } else {
      console.log("Storage may be cleared by the UA under storage pressure.");
    }
  });
}

要了解更多資訊,請參閱 瀏覽器儲存的資料是否持久?

配額和使用量估算

使用者代理使用它選擇的任何機制來確定給定網站可以使用的最大儲存量。這個最大值是源的配額。該空間被網站使用的量稱為其使用量。這兩個值都是估算值;它們不精確有幾個原因:

  • 鼓勵使用者代理模糊給定源所使用資料的確切大小,以防止這些值被用於 指紋識別目的。
  • 可能會使用去重、壓縮和其他方法來減小儲存資料的實際大小。
  • 配額是源可用空間保守的估算值,應小於裝置上的可用空間,以幫助防止溢位。

要確定給定源的估算配額和使用量值,請使用 navigator.storage.estimate() 方法,該方法返回一個 Promise,解析後接收一個包含這些資料的物件。例如:

js
navigator.storage.estimate().then((estimate) => {
  // estimate.quota is the estimated quota
  // estimate.usage is the estimated number of bytes used
});

有關源可以儲存多少資料的更多資訊,請參閱 可以儲存多少資料?

資料清除

資料清除是使用者代理刪除源儲存資料的過程。例如,當用於儲存資料的裝置儲存空間不足時,可能會發生這種情況。

在清除源儲存的資料時,源的儲存桶被視為一個整體。此源儲存的全部資料將被清除。

如果一個儲存桶被標記為"persistent",除非資料來源本身或使用者明確執行此操作,否則使用者代理不會清除其內容。這包括使用者選擇“清除快取”或“清除最近歷史記錄”等場景。使用者將被特別要求允許刪除持久網站儲存桶。

要了解更多資訊,請參閱 何時會清除資料?

介面

StorageManager

提供了一個用於管理持久化許可權和估算可用儲存的介面。

其他介面的擴充套件

返回用於按站點/應用程式管理持久化許可權和估算可用儲存的單例 StorageManager 物件。

WorkerNavigator.storage 只讀

返回一個 StorageManager 介面,用於管理持久化許可權和估算可用儲存。

規範

規範
Storage
# storagemanager

瀏覽器相容性

另見