IndexedDB

IndexedDB 是一种低级API,用于客户端存储大量结构化数据(包括, 文件/ blobs)。该API使用索引来实现对该数据的高性能搜索。虽然 Web Storage 对于存储较少量的数据很有用,但对于存储更大量的结构化数据来说,这种方法不太有用。IndexedDB提供了一个解决方案。

这是MDN IndexedDB覆盖面的主要着陆页 - 这里,我们提供了完整的API参考和使用指南, 浏览器支持细节,以及关键概念的一些解释的链接。

Note: 此特性在 Web Worker 中可用。

注意:IndexedDB API是强大的,但对于简单的情况可能看起来太复杂。如果你更喜欢一个简单的API,请尝试类库,如localForagedexie.js, 和 ZangoDB,使IndexedDB更方便用户。

 

关键概念和用法

IndexedDB是一个事务型数据库系统,类似于基于SQL的RDBMS。 然而不同的是它使用固定列表,IndexedDB是一个基于JavaScript的面向对象的数据库。 IndexedDB允许您存储和检索用键索引的对象; 可以存储structured clone algorithm支持的任何对象。 您只需要指定数据库模式,打开与数据库的连接,然后检索和更新一系列事务中的数据。

 

此页面从根本上来说是针对该 API 对象技术描述的入口。如果你需要的是一份入门读本,你应该查阅 有关 IndexedDB 的基本概念。至于更多详细信息,请参见 使用 IndexedDB

IndexedDB 分别为同步和异步访问提供了单独的 API 。同步 API 本来是要用于仅供 Web Workers 内部使用,但是还没有被任何浏览器所实现。异步 API 在 Web Workers 内部和外部都可以使用。

异步 API

异步 API 方法调用完后会立即返回,而不会阻塞调用线程。要异步访问数据库,要调用 window 对象 indexedDB 属性的 open() 方法。该方法返回一个 IDBRequest 对象 (IDBOpenDBRequest);异步操作通过在 IDBRequest 对象上触发事件来和调用程序进行通信。

注意: indexedDB 对象在旧版本的浏览器上是带有前缀的 (在 Gecko < 16的情况下是 mozIndexedDB 属性,Chrome 中是 webkitIndexedDB ,以及IE10 的 msIndexedDB )。

  • IDBFactory 提供了对数据库的访问。这是由全局对象 indexedDB 实现的接口,因而也是该 API 的入口。
  • IDBCursor 遍历对象存储空间和索引。
  • IDBCursorWithValue 遍历对象存储空间和索引并返回游标的当前值。
  • IDBDatabase 表示到数据库的连接。只能通过这个连接来拿到一个数据库事务。
  • IDBEnvironment 提供了到客户端数据库的访问。它由 window 对象实现。
  • IDBIndex 提供了到索引元数据的访问。
  • IDBKeyRange 定义键的范围。
  • IDBObjectStore 表示一个对象存储空间。
  • IDBOpenDBRequest 表示一个打开数据库的请求。
  • IDBRequest 提供了到数据库异步请求结果和数据库的访问。这也是在你调用一个异步方法时所得到的。
  • IDBTransaction 表示一个事务。你在数据库上创建一个事务,指定它的范围(例如你希望访问哪一个对象存储空间),并确定你希望的访问类型(只读或写入)。
  • IDBVersionChangeEvent 表明数据库的版本号已经改变。

一个早期版本的规范还定义了下面这些现在已经被删除的接口。因为可能会需要对之前编写的代码进行更新,所以我们依然对这些接口进行了文档化:

规范里面还定义了 API 的同步版本。同步 API 还没有在任何浏览器中得以实现。它原本是要和 WebWorkers 一起使用的。

存储空间限制

一个单独的数据库项目的大小没有限制。然而可能会限制每个 IndexedDB 数据库的大小。这个限制(以及用户界面对它进行断言的方式)在各个浏览器上也可能有所不同:

示例

网上有一个 Marco Castelluccio 开发的 IndexedDB 能被用来做什么的强大示例,他是 IndexedDB Mozilla DevDerby 的胜出者。 获奖的演示是 eLibri,一个图书馆和电子书阅读器应用程序。

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
异步 API 12 webkit

16.0 (16.0)
4.0 (2.0) moz

10 ms 未实现 未实现
同步 API
(用于 WebWorkers)
未实现 未实现
See bug 701634
未实现 未实现 未实现
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
异步 API 未实现 6.0 (6.0) moz 未实现 未实现 未实现

另外一个浏览器兼容性矩阵请参见: When Can I Use IndexedDB

通过 IndexedDB Polyfill 也有可能在 支持 WebSQL 的浏览器 上使用 IndexedDB。

参见

文档标签和贡献者