IndexedDB

相比Cache等其他客户端储存有快速查询的优势, 离线wikipedia是最好的用例。// 一般用不到。。。

支持二进制储存!!
可供浏览器离线使用的NoSQL数据库(里面有多个Object stores)
Object stores可以储存任意对象或基本数据类型,键有4种提供方法 //是否提供 key path 和 key generator (autoIncrement)
基于事务模型,对数据库的一个操作就是一次事务处理
使用键值对储存数据,能高效索引
window.indexedDB.open("MyTestDatabase", 2); // => request // 第二个参数是版本,初次打开和更新版本都会触发upgradeneeded事件,处理程序中可以新建/更新储存空间和索引 // 事件中获取 db
db.createObjectStore("customers", { keyPath: "ssn" }); // => objectStore // customers 相当于关系型数据库的表
objectStore.createIndex("Email", "Email", { unique: true }); // 可以创建多个
db.transaction(["customers"], "readwrite"); // 放在 objectStore.transaction.oncomplete 中确保事物完成后才写入数据
使用 get() 要求你知道你想要检索哪一个键(主键)。
.index("name");使用索引得到的是总是得到键值最小的那个。
索引可以结合游标
.openCursor()给定范围和方向
unique可以确保不会有两个具有同样索引值Email的对象被储存
指定你想让这个事务跨越哪些对象存储空间
事务具有三种模式(只读,读写,和版本变更),在可以的情况下你最好还是使用只读事务,因为它们可以并发运行。
创建 Object store 时先判断 idb.objectNames 是否包含
当版本更新时才需要关闭数据库