IndexedDB是一个低级API,用于存储大量结构化数据(包括文件/ blob)的客户端
特性
- IndexedDB是一个事务数据库系统,索引表系统
- 使用IndexedDB执行的操作是异步完成的,以免阻塞应用程序
- 无法跨域访问数据
术语
- 数据库
信息存储库,通常包括一个或多个
对象存储库
- 对象存储
数据存储在数据库中的机制。对象存储持久保存记录,这些记录是键值对。对象存储中记录根据排序键以升序。
- 数据库版本
每个数据库一次只有一个版本,数据库不能同时存在多个版本,高版本会代替低版本。
- 数据库连接
通过打开数据库创建的操作。给定的数据库可以同时具有多个连接。
- 请求
完成对数据库的读写操作。每个请求代表一次读或写操作。
- 索引
索引是持久键值存储,其记录的值部分是引用的对象库中记录的关键部分,自动填充
- 值
每条记录都有一个值,可以包含任何可以用JavaScript表示的值,包括布尔值,数字,字符串,日期,对象,数组,正则表达式,未定义和null。
流程
- 打开一个数据库。
- 在数据库中创建对象库。
- 启动事务并发出请求以执行某些数据库操作,如添加或检索数据。
- 通过侦听正确的DOM事件等待操作完成。
- 对结果做一些事情(可以在请求对象上找到)。
接口
检测获取
// 获取indexedDB
export const indexedDB = (win: any = window): IDBFactory =>
win.indexedDB || win.webkitIndexedDB || win.mozIndexedDB || win.msIndexedDB;
export const IDBTransaction = (win: any = window) =>
win.IDBTransaction ||
win.webkitIDBTransaction ||
win.msIDBTransaction || { READ_WRITE: 'readwrite' };
export const IDBKeyRange = (win: any = window) =>
win.IDBKeyRange || win.webkitIDBKeyRange || win.msIDBKeyRange;
// 检测
export const isSupportIndexedDB = () => {
const db = indexedDB();
if (db) {
return true;
} else {
console.error(`您的浏览器不支持indexed db`);
return false;
}
};
打开数据库
const request = (name,version)=>indexedDB().open(name,version)