什么是 IndexedDB?
IndexedDB 是一个不断发展的 Web 标准,用于在浏览器中存储大量结构化数据,并使用索引对这些数据进行高性能搜索。换句话说,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 上的更新
- 如需详细了解 IndexedDB,请参阅 MDN 上的 IndexedDB
- 有关如何在简单的待办事项 Web 应用中使用 indexedDB 的完整示例
下次再见... 继续将网站推广到附近的地区。