存储 API

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在部分或所有支持的浏览器中可用。

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

存储标准定义了一个共享存储系统,旨在供所有 API 和技术使用,网站可以使用这些 API 和技术在用户的浏览器中存储数据。

存储标准管理的网站存储的数据通常包括IndexedDB 数据库Cache API 数据,但也可能包括其他类型的站点可访问数据,例如Web 存储 API 数据

存储 API 使网站能够了解它们可以使用多少空间、它们已经使用了多少空间,甚至可以控制在用户代理处置数据以腾出空间用于其他内容之前,是否需要向它们发出警报。

本文概述了用户代理存储和维护网站数据的方式。有关存储限制和逐出的更多信息,请参阅浏览器存储配额和逐出标准

本文还概述了用于估算站点可用存储空间的StorageManager接口。

概念和用法

存储桶

存储标准描述的存储系统(其中存储站点数据)通常为每个包含一个

从本质上讲,每个网站都有自己的存储空间,其数据将放置到该空间中。但在某些情况下,用户代理可能会决定将单个源的数据存储在多个不同的桶中,例如当此源嵌入到不同的第三方源中时。

要了解更多信息,请参阅浏览器如何将不同网站的数据分开?

桶模式

每个站点存储桶都有一个模式,用于描述该桶的数据保留策略。有两种模式

"尽力而为"

用户代理将尽其所能保留桶中包含的数据,但如果存储空间不足并且需要清除桶以缓解存储压力,则不会警告用户

"持久"

用户代理将尽可能长时间地保留数据,在考虑清除标记为"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()方法,该方法返回一个承诺,当解析时,会接收一个包含这些数字的对象。例如

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接口,用于管理持久权限和估算可用存储空间。

规范

规范
存储标准
# storagemanager

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅