跳到主要内容

认识

2025年01月19日
柏拉文
越努力,越幸运

一、认识


IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用,但对于存储更大量的结构化数据来说力不从心。而 IndexedDB 提供了这种场景的解决方案。

二、语法


IndexedDB 鼓励使用的基本模式如下所示:

  1. 打开数据库

  2. 在数据库中创建一个对象存储(object store

  3. 启动事务,并发送一个请求来执行一些数据库操作,如添加或获取数据等

  4. 通过监听正确类型的 DOM 事件以等待操作完成

  5. 对结果进行一些操作(可以在 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);
});
};
};