IndexedDB 的基本用法和特点是什么?
请介绍 IndexedDB 的特点、基本操作(打开数据库、创建对象存储、增删改查)。
回答
古法程序员
IndexedDB:浏览器提供的低级、异步、事务型 NoSQL 数据库,适合存储大量结构化数据。
特点:
- 存储大小无限制(通常 > 50MB,取决于磁盘空间)
- 键值对存储,支持索引、事务、游标
- 异步操作(不阻塞 UI)
- 同源隔离
- 支持结构化克隆(可存对象/Blob/文件等)
基本操作:
// 1. 打开/创建数据库
const request = indexedDB.open('MyDB', 1);
request.onupgradeneeded = (e) => {
const db = e.target.result;
// 创建对象存储(类似表)
if (!db.objectStoreNames.contains('users')) {
const store = db.createObjectStore('users', { keyPath: 'id' });
store.createIndex('name', 'name', { unique: false });
}
};
request.onsuccess = (e) => {
const db = e.target.result;
// 2. 写入事务
const tx = db.transaction('users', 'readwrite');
const store = tx.objectStore('users');
store.add({ id: 1, name: 'Alice', age: 25 });
// 3. 读取
const getReq = store.get(1);
getReq.onsuccess = () => console.log(getReq.result);
// 4. 使用索引查询
const index = store.index('name');
index.get('Alice').onsuccess = (e) => console.log(e.target.result);
tx.oncomplete = () => db.close();
};
第三方封装库:Dexie.js、idb-keyval 提供了更友好的 API。