IndexedDB
现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过 4KB,且每次请求都会发送回服务器;LocalStorage 在 2.5MB 到 10MB 之间(各家浏览器不同),而且不提供搜索功能,不能建立自定义的索引。IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。
IndexedDB 具有以下特点:
(1)键值对储存。
(2)异步。
(3)支持事务。
(4)同源限制。
(5)储存空间大。
(6)支持二进制储存。
操作流程
1.打开/新建数据库
var request = window.indexedDB.open(databaseName, version);
第一个参数是字符串,表示数据库的名字。如果指定的数据库不存在,就会新建数据库。第二个参数是整数,表示数据库的版本。如果省略,打开已有数据库时,默认为当前版本;新建数据库时,默认为1。可能触发三种事error(失败)、success(成功)、upgradeneeded(升级:指定的版本号,大于数据库的实际版本号)。
新建数据库会触发upgradeneeded事件,具体的建立过程就在事件的监听函数里面完成。
2.新建对象仓库
新建数据库以后,第一件事是新建对象仓库。建立之前先判断一下,如果不存在再新建。
request.onupgradeneeded = function (event) {
var db = event.target.result;
var objectStore;
if (!db.objectStoreNames.contains('person')) {
objectStore = db.createObjectStore('person', { keyPath: 'id' }); //新建叫做person的对象仓库,主键是id。
}
}
新建对象仓库以后,下一步可以新建索引。
request.onupgradeneeded = function(event) {
db = event.target.result;
var objectStore = db.createObjectStore('person', { keyPath: 'id' });
objectStore.createIndex('name', 'name', { unique: false });
objectStore.createIndex('email', 'email', { unique: true });
}
3.新建数据