IndexedDB

IndexedDB是一个功能强大且高度灵活的存储系统,你可使用它在用户浏览器中存储你但愿存储的任何数据。不过,出色的功能和灵活性导致其API不像Web存储那么友好。你还会发现,移动端浏览器对IndexedDB的支持还不是很友好,即便支持。数据库

IndexedDB关键术语

数据库

IndexedDB的最上层是数据库的概念。浏览器

对象存储

对象存储至关于保存数据的桶。若是你使用过传统的关系型数据库,则能够将对象存储想象成一张表。可是IndexedDB能够更灵活地存储数据。数据结构

索引

索引是一种从对象存储中检索数据的方式。异步

使用数据库

建立数据库时,须要提供一个名称和版本。数据库结构(指对象存储和索引,而不是实际数据自己)只能在更改版本时临时调整。
在IndexDB中,你所作的全部操做都是异步的。所以,打开数据库并不意味着当即就可使用,而是须要在响应一个事件以后才可使用。打开数据库操做能够触发的事件包括success、error、upgradeneeded和blocked.
其中upgradeneeded在用户首次访问数据库或者版本号发生变化时出发,这是设置数据结构的地方。bloced在数据库不可用或者没法使用时被触发。网站

function idbOK(){
    return "indexedDB" in window;
}
$(documengt).ready(function() {
    if(!idbOK) return;
    var openRequest = indexedDB.open("ora_idb1", 1);
    openRequest.onsuccess = function(e) {
        var db = e.target.result;
    }
});

上述代码中,首先检查浏览器是否支持IndexedDB。若是支持,则使用indexedDB.open方法打开数据库。第一个参数是数据库名称。因为一个IndexedDB数据库只提供给一个网站使用,所以不用担忧该名称和其余数据库的名称相冲突。this

使用对象存储

前面说过,indexedDB对象存储有点像SQL数据库表。它应该只包含一种“类型”的数据,好比"people""notes"或其余对象的实例。其思想是每一个须要持久化的数据类型都有一个对象存储。
对象存储只能在upgradeneeded事件处理期间建立。假设你设计的数据库支持两种对象存储。数据以后,你又决定存户第三种类型的数据。你须要作两件事:第一,更改版本号;第二,编写代码,增长新的对象存储。设计

建立对象存储

要建立对象存储,首先应该检查它是否存在。能够利用数据库变量(从打开数据库操做的事件处理器得到)访问objectStoreNames属性。该属性是一个DOMStringList实例,你能够查看它是否已经包含了某个值。若是没有,则能够调用createObjectStore("name", options)方法建立对象存储。code

openRequest.onupgradeneeded = function(e) {
    var thisDB = e.target.result;
    if(!thisDB.objectStoreNames.contains("firstOS")) {
        thisDB.createObjectStore("firstOS");
    }
}

定义主键

在对象存储中,每条数据都必须有一种可以惟一标识本身的方式。在定义对象存储时,你能够定义如何惟一地标识数据。
实际上,主要有两种定义方式。一种是定义一个key path,它本质上是一个永远存在而且包含惟一信息的属性。另外一种是使用key generator,它本质上是一种生成惟一值的方式。对象

相关文章
相关标签/搜索