IndexedDB API
注意:此功能在 Web Workers 中可用。
IndexedDB 是一个低级别的客户端存储 API,用于存储大量结构化数据,包括文件/blob。此 API 使用索引来实现对这些数据的高性能搜索。虽然 Web Storage 适用于存储少量数据,但对于存储大量结构化数据则不太适用。IndexedDB 提供了解决方案。这是 MDN IndexedDB 专题的主要入口页面 — 在这里我们提供指向完整 API 参考和使用指南、浏览器支持详情以及一些关键概念的解释链接。
关键概念和用法
IndexedDB 是一个事务数据库系统,类似于基于 SQL 的关系数据库管理系统 (RDBMS)。但是,与使用固定列表的基于 SQL 的 RDBMS 不同,IndexedDB 是一个基于 JavaScript 的面向对象的数据库。IndexedDB 允许您存储和检索使用 键 索引的对象;任何受 结构化克隆算法 支持的对象都可以存储。您需要指定数据库模式,打开到数据库的连接,然后在一系列 事务 中检索和更新数据。
- 阅读更多关于 IndexedDB 关键特性和基本术语 的内容。
- 使用我们的 使用 IndexedDB 指南,从基础知识开始异步学习使用 IndexedDB。
- 在 检查截止日期何时到期 指南中查看一个完整的循序渐进的示例。
注意: 与大多数 Web 存储解决方案一样,IndexedDB 遵循 同源策略。因此,虽然您可以在域内访问存储的数据,但不能跨不同域访问数据。
同步和异步
使用 IndexedDB 执行的操作是异步进行的,以免阻塞应用程序。
存储限制和清除标准
有许多 Web 技术在客户端(即本地磁盘)存储某种类型的数据。IndexedDB 是最常被讨论的。浏览器确定为 Web 数据存储分配多少空间以及在达到限制时删除什么的过程并不简单,并且在不同浏览器之间有所不同。 浏览器存储配额和清除标准 尝试解释这是如何工作的,至少在 Firefox 的情况下是如此。
接口
要访问数据库,请在 window 对象的 indexedDB 属性上调用 open()。此方法返回一个 IDBRequest 对象;异步操作通过在 IDBRequest 对象上触发事件来与调用应用程序进行通信。
连接到数据库
IDBFactory-
提供对数据库的访问。此类型的对象是全局
Window.indexedDB和WorkerGlobalScope.indexedDB属性的值。因此,它是 API 的入口点。 IDBOpenDBRequest-
表示打开数据库的请求。
IDBDatabase-
表示对数据库的连接。这是获取数据库事务的唯一方式。
检索和修改数据
IDBTransaction-
表示一个事务。您可以在数据库上创建一个事务,指定范围(例如要访问的对象存储),并确定所需的访问类型(只读或读写)。
IDBRequest-
处理数据库请求并提供结果访问的通用接口。
IDBObjectStore-
表示一个对象存储,它允许通过主键访问 IndexedDB 数据库中的一组数据。
IDBIndex-
还允许访问 IndexedDB 数据库中的一部分数据,但使用索引而不是主键来检索记录。这有时比使用
IDBObjectStore更快。 IDBCursor-
遍历对象存储和索引。
IDBCursorWithValue-
遍历对象存储和索引并返回游标的当前值。
IDBKeyRange-
定义一个键范围,可用于在特定范围内从数据库中检索数据。
自定义事件接口
此规范会触发具有以下自定义接口的事件
IDBVersionChangeEvent-
IDBVersionChangeEvent接口指示数据库的版本已更改,这是IDBOpenDBRequest.onupgradeneeded事件处理函数的结果。
示例
规范
| 规范 |
|---|
| Indexed Database API 3.0 |