IndexedDB API - 用于客户端存储大量结构化数据的低级 API

IndexedDB 是用于客户端存储大量结构化数据(包括文件 / blob)的低级 API。该 API 使用索引来实现这些数据的高性能搜索。虽然 Web Storage 对于存储少量数据很有用,但对于存储大量结构化数据则不太有用。IndexedDB 提供了一个解决方案。在这里我们提供了完整 API 参考和使用指南、浏览器支持详细信息以及关键概念的一些解释的链接。

注意: 此特性在 Web Worker 中可用。

注意:IndexedDB API 功能强大,但对于简单的情况可能看起来过于复杂。如果您更喜欢简单的 API,请尝试相关链接部分中的库,这些库使 IndexedDB 对程序员更友好。

关键概念和用法

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

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

同步和异步

使用 IndexedDB 执行的操作是异步完成的,以免阻塞应用程序。IndexedDB 最初包括同步和异步 API。同步 API 旨在仅用于 Web Workers,但已从规范中删除,因为不清楚是否需要它。但是,如果 Web 开发人员有足够的需求,可能会重新引入同步 API。

存储限制和驱逐标准

有许多网络技术可以在客户端(即在您的本地磁盘上)存储这样或那样的数据。IndexedDB 是最常被谈论的。浏览器计算分配给 Web 数据存储的空间以及达到该限制时要删除的内容的过程并不简单,并且因浏览器而异。浏览器存储限制和驱逐标准 试图解释这是如何工作的(至少在 Firefox 的情况下是这样)。

接口

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

连接到数据库

IDBEnvironment

提供对 IndexedDB 功能的访问。它由 windowworker 对象实现。此接口不是 2.0 规范的一部分。

IDBFactory

提供对数据库的访问。它是由全局对象 indexedDB 实现的接口,因此是 API 的入口点。

IDBOpenDBRequest

表示打开数据库的请求。

IDBDatabase

表示与数据库的连接。这是在数据库上获取事务的唯一方法。

检索和修改数据

IDBTransaction

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

IDBRequest

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

IDBObjectStore

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

IDBIndex

该接口也允许访问 IndexedDB 数据库中的数据子集,但使用索引来检索记录而不是主键。这有时比使用 IDBObjectStore 更快。

IDBCursor

用于迭代对象存储和索引。

IDBCursorWithValue

用于迭代对象存储和索引并返回游标的当前值。

IDBKeyRange

定义可用于从特定范围内的数据库检索数据的键范围。

IDBLocaleAwareKeyRange

定义了可以用于在一定范围内,以从数据库中检索数据的键范围,排序根据用于特定索引所指定的区域设置的规则(见的 createIndex()optionalParameters)。此接口不是 2.0 规范的一部分。

自定义事件接口

此规范使用以下自定义接口触发事件:

IDBVersionChangeEvent

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

过时的接口

该规范的早期版本还定义了以下现已删除的接口。如果您需要更新以前编写的代码,它们仍然被记录在案:

IDBDatabaseException

表示在执行数据库操作时可能遇到的异常情况。

IDBTransactionSync

IDBTransaction 的同步版本。

IDBObjectStoreSync

IDBObjectStore 的同步版本。

IDBIndexSync

IDBIndex 的同步版本。

IDBFactorySync

IDBFactory 的同步版本。

IDBEnvironmentSync

IDBEnvironment 的同步版本。

IDBDatabaseSync

IDBDatabase 的同步版本。

IDBCursorSync

IDBCursor 的同步版本。

实例

规范

规范
Indexed Database API

相关链接

  • localForage:一个为客户端数据存储提供简单 “名称:值” 语法的 Polyfill,它在后台使用 IndexedDB,但在不支持 IndexedDB 的浏览器中回退到 WebSQL,然后使用 localStorage。
  • Dexie.js:一个 IndexedDB 的封装,通过漂亮、简单的语法允许更快的代码开发。
  • ZangoDB: 一个类似于 MongoDB 的 IndexedDB 接口,支持 MongoDB 的大多数熟悉的过滤、投影、排序、更新和聚合功能。
  • JsStore: 一个带有类似 SQL 语法的 IndexedDB 封装。
  • MiniMongo:由本地存储支持的客户端内存 mongodb,通过 http 进行服务器同步。MiniMongo 由 MeteorJS 使用。
  • PouchDB:一个在浏览器中使用 IndexedDB 实现的 CouchDB 客户端
  • idb:一个很小的(~1.15k)库,大部分反映了 IndexedDB 的 API,但有一些小的改进,对可用性产生了很大的影响。
  • idb-keyval:一个使用 IndexedDB 实现的超简单小(~600B)基于承诺的 keyval 存储。
  • sifrr-storage:用于客户端键值存储的小型(~2kB)基于承诺的库。适用于 IndexedDB、localStorage、WebSQL、Cookies。可以根据优先级自动使用受支持的可用存储。
  • lovefield: Lovefield 是一个用于 Web 应用程序的关系数据库。用 JavaScript 编写,跨浏览器工作。提供快速、安全且易于使用的类似 SQL 的 API。
  • $mol_db:小巧(约1.3kB)的 TypeScript facade,具有基于承诺的接口和自动迁移功能。