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,它本質上是一種生成惟一值的方式。對象

相關文章
相關標籤/搜索