什么是 IndexedDB?
IndexedDB 是一种不断发展的网络标准,用于在浏览器中存储大量结构化数据,以及使用索引对这些数据进行高性能搜索。换句话说,IndexedDB 是一个对象存储。它与关系型数据库不同,后者包含包含集合行和列的表。它是一种非常重要的根本性区别,会影响您设计和构建应用的方式(详情请参见基本概念)。
那么有哪些新变化呢?
更改朋友... 我们进行的一些更改,如果不通过简单的语法更改来处理,就会抛出一些错误。
从版本 17 开始,如果 IndexedDB 事务的范围未限定为对象存储,Chrome 就会抛出错误。由于所有的读取和写入操作都是在事务中完成的,因此我们需要在数据库上创建事务,指定作用域(例如您要访问的对象存储)并确定访问类型(只读或写入)。
它在代码中的含义是什么? 我们无需向 database.transaction 传递空数组:
var transaction = db.transaction([], IDBTransaction.READ_ONLY);
您应该将作用域限定为特定的对象存储或对象存储列表:
// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);
// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
IDBTransaction.READ_ONLY);
// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);
您可以在事务中使用正确的范围和模式,以加快数据访问速度。以下是几条提示:定义范围时,请仅指定所需的对象存储。这样,您可以同时运行范围不重叠的多个事务。仅在必要时指定 READ_WRITE
事务模式。您可以同时运行多个范围重叠的 READ_ONLY
事务,但一个对象存储只能有一个 READ_WRITE
事务。
其他来源:
- 有关 chromium.org 的更新
- 如需了解详情,请参阅 MDN 中的 IndexedDB
- 有关如何在简单的待办事项列表 Web 应用中使用 indexDB 的完整示例
下次再见了...继续将网络推广至邻近地区。