IndexedDB
實驗性質: 這是一個實驗中的功能 (en-US)
此功能在某些瀏覽器尚在開發中,請參考兼容表格以得到不同瀏覽器用的前輟。
IndexedDB 為用戶端的儲存用 API,可用於大量的結構化資料,並透過索引功能而高效率搜尋資料。DOM Storage (en-US) 適合儲存較少量的資料;IndexedDB 則適合大量結構化資料的儲存方案。
本篇文章僅為 API 物件的入門技術說明。若需進一步了解,則請參閱 IndexedDB 基本概念。更多細節則可參閱使用 IndexedDB。
IndexedDB 提供不同 APIs 用於同步與非同步的存取作業。同步 API 僅能用於Web Workers (en-US) 之中,但尚未有瀏覽器支援同步 API。非同步 API 則用於 Web Workers 內外均可,但 Firefox 目前尚未建構。
非同步 API
非同步 API 不會阻塞呼叫它的執行緒。若要非同步存取資料庫,可於 window (en-US) 物件的 indexedDB 屬性上呼叫 open (en-US)()。此函式將回傳 IDBRequest 物件 (IDBOpenDBRequest),開始非同步存取資料庫;呼叫端程式利用 IDBRequest 物件上的事件來進行非同步溝通。
備註: 在舊版瀏覽器 (Gecko 16 版之前的 indexedDB 屬性;Chrome 中的 webkitIndexedDB;IE 10 中的 msIndexedDB) 中的 indexedDB 物件,均具備前綴屬性。
IDBFactory
(en-US) 可存取資料庫。此介面是透過全域物件indexedDB
所建構,因此成為 API 的切入點。IDBCursor
(en-US) 將依序存取物件與索引。IDBCursorWithValue
(en-US) 將依序存取物件與索引,並回傳指標 (Cursor) 的目前數值。IDBDatabase
(en-US) 代表到資料庫的連線。這也是能與資料庫互動的唯一方式。IDBEnvironment
可存取用戶端的資料庫。此介面是透過 window (en-US) 物件所建構。IDBIndex
(en-US) 可存取索引的 Metadata。IDBKeyRange
(en-US) 定義資料鍵範疇。IDBObjectStore
(en-US) 代表物件存檔。IDBOpenDBRequest
(en-US) 代表「開啟資料庫」的請求。IDBRequest
(en-US) 代表向非同步資料庫和資料庫物件發出之請求,也就是呼叫非同步方法後回傳值。IDBTransaction
(en-US) 代表一個交易。我們可以和資料庫進行交易,例如要求存取某一個物件存檔,以及決定要執行讀或寫的存取作業。IDBVersionChangeEvent
(en-US)則代表資料庫所變更的版本。
以下 API 在早期規範中有定義,但現已移除。這邊列出僅供參考:
- IDBVersionChangeRequest 代表「更改資料庫版本」的請求。更改資料庫版本的方法已有不同 (呼叫 IDBFactory.open() (en-US) 而不需同時呼叫 IDBDatabase.setVersion() (en-US));而且IDBOpenDBRequest (en-US)已經整合了從 IDBVersionChangeRequest 中所移除之功能。
- IDBDatabaseException 已棄用 在執行資料庫作業時,代表可能遭遇的例外狀況。
除了非同步 API,也有應用在WebWorkers (en-US)內的同步 API,但請注意目前還沒有瀏覽器支援同步 API。這裡也提供 API 的同步版本 (en-US)。
儲存限制
單一資料庫項目的容量/大小並沒有任何限制,但是各個 IndexedDB 資料庫的容量就有限制。此限制,還有使用者介面的斷言 (Assert) 方式,又將因瀏覽器而有所不同:
- Firefox:對 IndexedDB 資料庫的容量並無限制。但若要儲存的 Blobs 超過 50 MB,使用者介面將會要求權限。若要修改此容量,則可透過 dom.indexedDB.warningQuota (可至 http://mxr.mozilla.org/mozilla-central/source/modules/libpref/src/init/all.js 中設定) 設定自己所需的限制。
- Google Chrome:請參閱 https://developers.google.com/chrome...rage#temporary
範例
Web 上的 IndexedDB 使用範例,是由 Marco Castelluccio 所提供。Marco 是 IndexedDB Mozilla DevDerby 的優勝者,而該得獎 Demo 為 eLibri,屬於函式庫與 eBook 閱讀器的 App。
另可參閱
- IndexedDB 基本概念
- 使用 IndexedDB
- 在 IndexedDB 中儲存影像與檔案
- 使用 HTML5 IndexedDB 的簡易 TODO 清單
備註: 此線上教學是根據較舊版本的規格所列,因此無法搭配最新版的瀏覽器。新版本已移除其中的
setVersion()
函式。 - Indexed Database API 規格
- IndexedDB — 儲存於自己的瀏覽器中
- IndexedDB 範例
- 僅支援 WebSQL 的瀏覽器 (例如行動 WebKit),可適用 IndexedDB Polyfill
- JQuery IndexedDB 外掛程式