认识
2025年01月19日
一、认识
IndexedDB
是一种底层 API
,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs
))。该 API
使用索引实现对数据的高性能搜索。虽然 Web Storage
在存储较少量的数据很有用,但对于存储更大量的结构化数据来说力不从心。而 IndexedDB
提供了这种场景的解决方案。
二、语法
IndexedDB
鼓励使用的基本模式如下所示:
-
打开数据库
-
在数据库中创建一个对象存储(
object store
) -
启动事务,并发送一个请求来执行一些数据库操作,如添加或获取数据等
-
通过监听正确类型的
DOM
事件以等待操作完成 -
对结果进行一些操作(可以在
request
对象中找到)
const dbName = "the_name";
const request = indexedDB.open(dbName, 2);
request.onerror = (event) => {
// 错误处理
};
request.onupgradeneeded = (event) => {
const db = event.target.result;
// 创建一个对象存储来存储我们客户的相关信息,我们将“ssn”作为键路径
// 因为 ssn 可以保证是不重复的——或至少在启动项目的会议上我们是这样被告知的。
const objectStore = db.createObjectStore("customers", { keyPath: "ssn" });
// 创建一个索引以通过姓名来搜索客户。名字可能会重复,所以我们不能使用 unique 索引。
objectStore.createIndex("name", "name", { unique: false });
// 使用邮箱建立索引,我们想确保客户的邮箱不会重复,所以我们使用 unique 索引。
objectStore.createIndex("email", "email", { unique: true });
// 使用事务的 oncomplete 事件确保在插入数据前对象存储已经创建完毕。
objectStore.transaction.oncomplete = (event) => {
// 将数据保存到新创建的对象存储中。
const customerObjectStore = db
.transaction("customers", "readwrite")
.objectStore("customers");
customerData.forEach((customer) => {
customerObjectStore.add(customer);
});
};
};