IndexedDB API

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

IndexedDB 是一个低级别的客户端存储 API,用于存储大量结构化数据,包括文件/blob。此 API 使用索引来实现对这些数据的高性能搜索。虽然 Web Storage 适用于存储少量数据,但对于存储大量结构化数据则不太适用。IndexedDB 提供了解决方案。这是 MDN IndexedDB 专题的主要入口页面 — 在这里我们提供指向完整 API 参考和使用指南、浏览器支持详情以及一些关键概念的解释链接。

关键概念和用法

IndexedDB 是一个事务数据库系统,类似于基于 SQL 的关系数据库管理系统 (RDBMS)。但是,与使用固定列表的基于 SQL 的 RDBMS 不同,IndexedDB 是一个基于 JavaScript 的面向对象的数据库。IndexedDB 允许您存储和检索使用 索引的对象;任何受 结构化克隆算法 支持的对象都可以存储。您需要指定数据库模式,打开到数据库的连接,然后在一系列 事务 中检索和更新数据。

注意: 与大多数 Web 存储解决方案一样,IndexedDB 遵循 同源策略。因此,虽然您可以在域内访问存储的数据,但不能跨不同域访问数据。

同步和异步

使用 IndexedDB 执行的操作是异步进行的,以免阻塞应用程序。

存储限制和清除标准

有许多 Web 技术在客户端(即本地磁盘)存储某种类型的数据。IndexedDB 是最常被讨论的。浏览器确定为 Web 数据存储分配多少空间以及在达到限制时删除什么的过程并不简单,并且在不同浏览器之间有所不同。 浏览器存储配额和清除标准 尝试解释这是如何工作的,至少在 Firefox 的情况下是如此。

接口

要访问数据库,请在 window 对象的 indexedDB 属性上调用 open()。此方法返回一个 IDBRequest 对象;异步操作通过在 IDBRequest 对象上触发事件来与调用应用程序进行通信。

连接到数据库

IDBFactory

提供对数据库的访问。此类型的对象是全局 Window.indexedDBWorkerGlobalScope.indexedDB 属性的值。因此,它是 API 的入口点。

IDBOpenDBRequest

表示打开数据库的请求。

IDBDatabase

表示对数据库的连接。这是获取数据库事务的唯一方式。

检索和修改数据

IDBTransaction

表示一个事务。您可以在数据库上创建一个事务,指定范围(例如要访问的对象存储),并确定所需的访问类型(只读或读写)。

IDBRequest

处理数据库请求并提供结果访问的通用接口。

IDBObjectStore

表示一个对象存储,它允许通过主键访问 IndexedDB 数据库中的一组数据。

IDBIndex

还允许访问 IndexedDB 数据库中的一部分数据,但使用索引而不是主键来检索记录。这有时比使用 IDBObjectStore 更快。

IDBCursor

遍历对象存储和索引。

IDBCursorWithValue

遍历对象存储和索引并返回游标的当前值。

IDBKeyRange

定义一个键范围,可用于在特定范围内从数据库中检索数据。

自定义事件接口

此规范会触发具有以下自定义接口的事件

IDBVersionChangeEvent

IDBVersionChangeEvent 接口指示数据库的版本已更改,这是 IDBOpenDBRequest.onupgradeneeded 事件处理函数的结果。

示例

规范

规范
Indexed Database API 3.0

另见