This document is in progress to be translated. That's why it still contains text in another language.
Feel free to register and to help translate MDN!
這是一個實驗中的功能
此功能在某些瀏覽器尚在開發中,請參考兼容表格以得到不同瀏覽器用的前輟。
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在早期規範中有定義,但現已移除。這邊列出僅供參考:
- IDBVersionChangeRequest 代表「更改資料庫版本」的請求。更改資料庫版本的方法已有不同 (呼叫 IDBFactory.open() 而不需同時呼叫 IDBDatabase.setVersion());而且IDBOpenDBRequest已經整合了從IDBVersionChangeRequest中所移除之功能。
- IDBDatabaseException 在執行資料庫作業時,代表可能遭遇的例外狀況。
除了非同步API,也有應用在WebWorkers內的同步API,但請注意目前還沒有瀏覽器支援同步API。這裡也提供 API 的同步版本。
儲存限制
單一資料庫項目的容量/大小並沒有任何限制,但是各個 IndexedDB資料庫的容量就有限制。此限制,還有使用者介面的斷言 (Assert) 方式,又將因瀏覽器而有所不同:
-
Firefox:對 IndexedDB 資料庫的容量並無限制。但若要儲存的 Blobs 超過 50 MB,使用者介面將會要求權限。若要修改此容量,則可透過 dom.indexedDB.warningQuota (可至 https://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。
瀏覽器相容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Asynchronous API |
24.0 |
10 ms | Not supported | Not supported | |
Synchronous API (used with WebWorkers) |
Not supported | Not supported See bug 701634 |
Not supported | Not supported | Not supported |
Feature | Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Asynchronous API | Not supported | 6.0 (6.0) moz | Not supported | Not supported | Not supported |
瀏覽器相容性表格則請參閱:When Can I Use IndexedDB
另可透過 IndexedDB Polyfill,在支援 WebSQL 的瀏覽器上使用 IndexedDB。
另可參閱
- IndexedDB 基本概念
- 使用 IndexedDB
- 在 IndexedDB 中儲存影像與檔案
- 使用 HTML5 IndexedDB 的簡易 TODO 清單
註: 此線上教學是根據較舊版本的規格所列,因此無法搭配最新版的瀏覽器。新版本已移除其中的setVersion()
函式。 - Indexed Database API 規格
- IndexedDB — 儲存於自己的瀏覽器中
- IndexedDB 範例
- 僅支援 WebSQL 的瀏覽器 (例如行動 WebKit),可適用 IndexedDB Polyfill
- JQuery IndexedDB 外掛程式