主题
IndexedDB
- 适合存储 大量复杂数据(如应用缓存、用户订单记录),支持对象存储、事务和查询。容量可达 GB 级
- 需要事务管理
- 异步操作不阻塞页面
- 支持复杂查询和索引(比 localStorage 快得多)
js
// 打开或创建数据库
const request = indexedDB.open('myDatabase', 1);
request.onupgradeneeded = (event) => {
const db = event.target.result;
// 创建对象仓库(类似数据表),主键为 id
if (!db.objectStoreNames.contains('users')) {
db.createObjectStore('users', { keyPath: 'id' });
}
};
request.onsuccess = (event) => {
const db = event.target.result;
// 插入数据
const tx = db.transaction('users', 'readwrite');
const store = tx.objectStore('users');
store.add({ id: 1, name: 'Alice', age: 30 });
store.add({ id: 2, name: 'Bob', age: 25 });
tx.oncomplete = () => {
console.log('数据写入成功');
// 查询所有数据
const readTx = db.transaction('users', 'readonly');
const readStore = readTx.objectStore('users');
const getAllRequest = readStore.getAll();
getAllRequest.onsuccess = () => {
console.log('读取到的数据:', getAllRequest.result);
};
};
tx.onerror = (event) => {
console.error('事务出错:', event.target.error);
};
};
request.onerror = (event) => {
console.error('打开数据库失败:', event.target.error);
};