IndexedDB

實驗性質: 這是一個實驗中的功能
此功能在某些瀏覽器尚在開發中,請參考兼容表格以得到不同瀏覽器用的前輟。

IndexedDB 為用戶端的儲存用 API,可用於大量的結構化資料,並透過索引功能而高效率搜尋資料。DOM Storage 適合儲存較少量的資料;IndexedDB 則適合大量結構化資料的儲存方案。

本篇文章僅為 API 物件的入門技術說明。若需進一步了解,則請參閱 IndexedDB 基本概念。更多細節則可參閱使用 IndexedDB

IndexedDB 提供不同 APIs 用於同步與非同步的存取作業。同步 API 僅能用於Web Workers 之中,但尚未有瀏覽器支援同步 API。非同步 API 則用於 Web Workers 內外均可,但 Firefox 目前尚未建構。

非同步 API

非同步 API 不會阻塞呼叫它的執行緒。若要非同步存取資料庫,可於 window 物件的 indexedDB 屬性上呼叫 open()。此函式將回傳 IDBRequest 物件 (IDBOpenDBRequest),開始非同步存取資料庫;呼叫端程式利用 IDBRequest 物件上的事件來進行非同步溝通。

備註: 在舊版瀏覽器 (Gecko 16 版之前的 indexedDB 屬性;Chrome 中的 webkitIndexedDB;IE 10 中的 msIndexedDB) 中的 indexedDB 物件,均具備前綴屬性。

  • IDBFactory 可存取資料庫。此介面是透過全域物件 indexedDB 所建構,因此成為 API 的切入點。
  • IDBCursor 將依序存取物件與索引。
  • IDBCursorWithValue 將依序存取物件與索引,並回傳指標 (Cursor) 的目前數值。
  • IDBDatabase 代表到資料庫的連線。這也是能與資料庫互動的唯一方式。
  • IDBEnvironment 可存取用戶端的資料庫。此介面是透過 window 物件所建構。
  • IDBIndex 可存取索引的 Metadata。
  • IDBKeyRange 定義資料鍵範疇。
  • IDBObjectStore 代表物件存檔。
  • IDBOpenDBRequest 代表「開啟資料庫」的請求。
  • IDBRequest 代表向非同步資料庫和資料庫物件發出之請求,也就是呼叫非同步方法後回傳值。
  • IDBTransaction 代表一個交易。我們可以和資料庫進行交易,例如要求存取某一個物件存檔,以及決定要執行讀或寫的存取作業。
  • IDBVersionChangeEvent 則代表資料庫所變更的版本。

以下 API 在早期規範中有定義,但現已移除。這邊列出僅供參考:

除了非同步 API,也有應用在WebWorkers內的同步 API,但請注意目前還沒有瀏覽器支援同步 API。這裡也提供 API 的同步版本

儲存限制

單一資料庫項目的容量/大小並沒有任何限制,但是各個 IndexedDB 資料庫的容量就有限制。此限制,還有使用者介面的斷言 (Assert) 方式,又將因瀏覽器而有所不同:

範例

Web 上的 IndexedDB 使用範例,是由 Marco Castelluccio 所提供。Marco 是 IndexedDB Mozilla DevDerby 的優勝者,而該得獎 Demo 為 eLibri,屬於函式庫與 eBook 閱讀器的 App。

另可參閱