比较版本

IndexedDB

修订版 239515:

由 ziyunfei 在 进行的修订 239515

修订版 350489:

由 princetoad@gmail.com 在 进行的修订 350489

标题:
IndexedDB
IndexedDB
网址缩略名:
IndexedDB
IndexedDB
内容:

修订版 239515
修订版 350489
t7    This page was auto-generated because a user created a sub-pagt7    <p>
>e to this page. 
8      {{ SeeCompatTable() }}
9    </p>
10    <p>
11      IndexedDB 是一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API。
 >虽然 <a href="/en-US/docs/DOM/Storage" title="en-US/docs/DOM/Storag
 >e">DOM 存储</a> 对于存储少量数据是非常有用的,但是它对大量结构化数据的存储就显得力不从心了。IndexedDB 则提供
 >了这样的一个解决方案。
12    </p>
13    <p>
14      此页面从根本上来说是针对该 API 对象技术描述的入口。如果你需要的是一份入门读本,你应该查阅 <a href="/e
 >n-US/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB" title="/en-U
 >S/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB">有关 IndexedDB 的基
 >本概念</a>。至于更多详细信息,请参见 <a href="https://developer.mozilla.org/en-US
 >/docs/IndexedDB/Using_IndexedDB" title="https://developer.mozilla
 >.org/en-US/docs/IndexedDB/Using_IndexedDB">使用 IndexedDB</a>。
15    </p>
16    <p>
17      IndexedDB 分别为同步和异步访问提供了单独的 API 。同步 API 本来是要用于仅供&nbsp;<a hre
 >f="/en-US/docs/DOM/Worker" title="Worker">Web Workers</a> 内部使用,但是
 >还没有被任何浏览器所实现。异步 API 在 Web Workers 内部和外部都可以使用。
18    </p>
19    <h2 id="Asynchronous_API">
20      异步 API
21    </h2>
22    <p>
23      异步 API 方法调用完后会立即返回,而不会阻塞调用线程。要异步访问数据库,要调用 <a href="/en-US/d
 >ocs/DOM/window" title="en-US/docs/DOM/window">window</a> 对象 <a hr
 >ef="/en-US/docs/IndexedDB/IDBEnvironment#attr_indexedDB" title="e
 >n-US/docs/IndexedDB/IDBEnvironment#attr indexedDB"><code>indexedD
 >B</code></a> 属性的 <code><a href="/en-US/docs/IndexedDB/IDBFactory#
 >open" title="en-US/docs/IndexedDB/IDBFactory#open">open</a>()</co
 >de> 方法。该方法返回一个 IDBRequest 对象 (IDBOpenDBRequest);异步操作通过在 IDBReques
 >t 对象上触发事件来和调用程序进行通信。
24    </p>
25    <div class="note">
26      <p>
27        注意: <code>indexedDB</code> 对象在旧版本的浏览器上是带有前缀的 (在 Gecko &lt
 >; 16的情况下是 <code>mozIndexedDB</code> 属性,Chrome 中是 <code>webkitInde
 >xedDB</code> ,以及IE10 的&nbsp;<code>msIndexedDB</code> )。
28      </p>
29    </div>
30    <ul>
31      <li>
32        <a href="/en-US/docs/IndexedDB/IDBFactory" title="en-US/d
 >ocs/IndexedDB/IDBFactory"><code>IDBFactory</code></a> 提供了对数据库的访问。
 >这是由全局对象 <code>indexedDB</code> 实现的接口,因而也是该 API 的入口。
33      </li>
34      <li>
35        <a href="/en-US/docs/IndexedDB/IDBCursor" title="en-US/do
 >cs/IndexedDB/IDBCursor"><code>IDBCursor</code></a> 遍历对象存储空间和索引。
36      </li>
37      <li>
38        <a href="/en-US/docs/IndexedDB/IDBCursorWithValue"><code>
 >IDBCursorWithValue</code></a> 遍历对象存储空间和索引并返回游标的当前值。
39      </li>
40      <li>
41        <a href="/en-US/docs/IndexedDB/IDBDatabase" title="en-US/
 >docs/IndexedDB/IDBDatabase"><code>IDBDatabase</code></a> 表示到数据库的连
 >接。只能通过这个连接来拿到一个数据库事务。
42      </li>
43      <li>
44        <a href="/en-US/docs/IndexedDB/IDBEnvironment" title="en-
 >US/docs/IndexedDB/IDBEnvironment"><code>IDBEnvironment</code></a>
 > 提供了到客户端数据库的访问。它由 <a href="/../en-US/docs/DOM/window" rel="intern
 >al" title="../en-US/docs/DOM/window">window</a> 对象实现。
45      </li>
46      <li>
47        <a href="/en-US/docs/IndexedDB/IDBIndex" title="en-US/doc
 >s/IndexedDB/IDBIndex"><code>IDBIndex</code></a> 提供了到索引元数据的访问。
48      </li>
49      <li>
50        <code><a href="/en-US/docs/IndexedDB/IDBKeyRange" title="
 >en-US/docs/IndexedDB/KeyRange">IDBKeyRange</a></code> 定义键的范围。
51      </li>
52      <li>
53        <a href="/en-US/docs/IndexedDB/IDBObjectStore" title="en-
 >US/docs/IndexedDB/IDBObjectStore"><code>IDBObjectStore</code></a>
 > 表示一个对象存储空间。
54      </li>
55      <li>
56        <a href="/en-US/docs/IndexedDB/IDBOpenDBRequest" title="e
 >n-US/docs/IndexedDB/IDBOpenDBRequest"><code>IDBOpenDBRequest</cod
 >e></a> 表示一个打开数据库的请求。
57      </li>
58      <li>
59        <a href="/en-US/docs/IndexedDB/IDBRequest" title="en-US/d
 >ocs/IndexedDB/IDBRequest"><code>IDBRequest</code></a> 提供了到数据库异步请求
 >结果和数据库的访问。这也是在你调用一个异步方法时所得到的。
60      </li>
61      <li>
62        <a href="/en-US/docs/IndexedDB/IDBTransaction" title="en-
 >US/docs/IndexedDB/IDBTransaction"><code>IDBTransaction</code></a>
 > 表示一个事务。你在数据库上创建一个事务,指定它的范围(例如你希望访问哪一个对象存储空间),并确定你希望的访问类型(只读或写入)。
63      </li>
64      <li>
65        <a href="/en-US/docs/IndexedDB/IDBVersionChangeEvent" tit
 >le="IDBVersionChangeEvent"><code>IDBVersionChangeEvent</code></a>
 > 表明数据库的版本号已经改变。
66      </li>
67    </ul>
68    <p>
69      一个早期版本的规范还定义了下面这些现在已经被删除的接口。因为可能会需要对之前编写的代码进行更新,所以我们依然对这些接口
 >进行了文档化:
70    </p>
71    <ul>
72      <li>
73        <code><a href="/en-US/docs/IndexedDB/IDBVersionChangeRequ
 >est" title="https://developer.mozilla.org/en-US/docs/IndexedDB/ID
 >BVersionChangeRequest">IDBVersionChangeRequest</a></code> 表示更改数据库
 >版本号的请求。更改数据库版本的方式已经自此改变了(调用 <a href="/en-US/docs/IndexedDB/IDBFac
 >tory#open" title="en-US/docs/IndexedDB/IDBFactory#open"><code>IDB
 >Factory.open()</code></a> 而不需要再调用 &nbsp;<a href="/en-US/docs/Inde
 >xedDB/IDBDatabase#setVersion()" title="en-US/docs/IndexedDB/IDBDa
 >tabase#setVersion()"><code>IDBDatabase.setVersion()</code></a>),并
 >且 <a href="/en-US/docs/IndexedDB/IDBOpenDBRequest" title="en-US/d
 >ocs/IndexedDB/IDBOpenDBRequest"><code>IDBOpenDBRequest</code></a>
 > 接口现在具有已经移除的 <code>IDBVersionChangeRequest</code> 的功能。
74      </li>
75      <li>
76        <code><a href="/en-US/docs/IndexedDB/IDBDatabaseException
 >" title="en-US/docs/IndexedDB/DatabaseException">IDBDatabaseExcep
 >tion&nbsp;</a></code>&nbsp;{{ obsolete_inline() }}&nbsp;表示在执行数据库操
 >作时可能碰到的异常情况。
77      </li>
78    </ul>
79    <p>
80      规范里面还定义了 <a href="/en-US/docs/IndexedDB/Syncronous_API" tit
 >le="/en-US/docs/IndexedDB/SyncronousAPI">API 的同步版本</a>。同步 API 还没有
 >在任何浏览器中得以实现。它原本是要和 <a href="/en-US/docs/DOM/Using_web_workers" ti
 >tle="https://developer.mozilla.org/en-US/docs/Using_web_workers">
 >WebWorkers</a> 一起使用的。
81    </p>
82    <h2 id="Storage_limits">
83      存储空间限制
84    </h2>
85    <p>
86      一个单独的数据库项目的大小没有限制。然而可能会限制每个 IndexedDB 数据库的大小。这个限制(以及用户界面对它进
 >行断言的方式)在各个浏览器上也可能有所不同:
87    </p>
88    <ul>
89      <li>
90        <p>
91          Firefox: 对 IndexedDB 数据库的大小没有限制。在用户界面上只会针对存储超过 50 MB 大小
 >的 BLOB(二进制大对象)请求权限。这个大小的限额可以通过 <code>dom.indexedDB.warningQuota</
 >code> 首选项进行自定义 (定义在 <a href="http://mxr.mozilla.org/mozilla-centr
 >al/source/modules/libpref/src/init/all.js" title="http://mxr.mozi
 >lla.org/mozilla-central/source/modules/libpref/src/init/all.js">h
 >ttp://mxr.mozilla.org/mozilla-central/source/modules/libpref/src/
 >init/all.js</a>)。
92        </p>
93      </li>
94      <li>Google Chrome: 参见 <a class="link-https" href="https://d
 >evelopers.google.com/chrome/whitepapers/storage#temporary" rel="f
 >reelink">https://developers.google.com/chrome...rage#temporary</a
 >>
95      </li>
96    </ul>
97    <h2 id="Example" name="Example">
98      示例
99    </h2>
100    <p>
101      网上有一个 Marco Castelluccio 开发的 IndexedDB 能被用来做什么的强大示例,他是 Inde
 >xedDB Mozilla DevDerby 的胜出者。 获奖的演示是 <a href="/en-US/demos/detail/
 >elibri" title="https://developer.mozilla.org/en-US/demos/detail/e
 >libri">eLibri</a>,一个图书馆和电子书阅读器应用程序。
102    </p>
103    <h2 id="Browser_compatibility" name="Browser_compatibility">
104      浏览器兼容性
105    </h2>
106    <p>
107      {{ CompatibilityTable() }}
108    </p>
109    <div id="compat-desktop">
110      <table class="compat-table">
111        <tbody>
112          <tr>
113            <th>
114              Feature
115            </th>
116            <th>
117              Chrome
118            </th>
119            <th>
120              Firefox (Gecko)
121            </th>
122            <th>
123              Internet Explorer
124            </th>
125            <th>
126              Opera
127            </th>
128            <th>
129              Safari (WebKit)
130            </th>
131          </tr>
132          <tr>
133            <td>
134              同步 API
135            </td>
136            <td>
137              12 {{ property_prefix("webkit") }}
138            </td>
139            <td>
140              <p>
141                {{ CompatGeckoDesktop("16.0") }}<br>
142                {{ CompatGeckoDesktop("2.0") }} {{ property_prefi
 >x("moz") }}
143              </p>
144            </td>
145            <td>
146              10 {{ property_prefix("ms") }}
147            </td>
148            <td>
149              {{ CompatNo() }}
150            </td>
151            <td>
152              {{ CompatNo() }}
153            </td>
154          </tr>
155          <tr>
156            <td>
157              异步 API<br>
158              (用于 <a href="/en-US/docs/DOM/Using_web_workers" tit
 >le="https://developer.mozilla.org/en-US/docs/Using_web_workers">W
 >ebWorkers</a>)
159            </td>
160            <td>
161              {{ CompatNo() }}
162            </td>
163            <td>
164              {{ CompatNo() }}<br>
165              See {{ bug(701634) }}
166            </td>
167            <td>
168              {{ CompatNo() }}
169            </td>
170            <td>
171              {{ CompatNo() }}
172            </td>
173            <td>
174              {{ CompatNo() }}
175            </td>
176          </tr>
177        </tbody>
178      </table>
179    </div>
180    <div id="compat-mobile">
181      <table class="compat-table">
182        <tbody>
183          <tr>
184            <th>
185              Feature
186            </th>
187            <th>
188              Android
189            </th>
190            <th>
191              Firefox Mobile (Gecko)
192            </th>
193            <th>
194              IE Phone
195            </th>
196            <th>
197              Opera Mobile
198            </th>
199            <th>
200              Safari Mobile
201            </th>
202          </tr>
203          <tr>
204            <td>
205              Asynchronous API
206            </td>
207            <td>
208              {{ CompatNo() }}
209            </td>
210            <td>
211              {{ CompatGeckoDesktop("6.0") }} {{ property_prefix(
 >"moz") }}
212            </td>
213            <td>
214              {{ CompatNo() }}
215            </td>
216            <td>
217              {{ CompatNo() }}
218            </td>
219            <td>
220              {{ CompatNo() }}
221            </td>
222          </tr>
223        </tbody>
224      </table>
225    </div>
226    <p>
227      另外一个浏览器兼容性矩阵请参见: <a href="http://caniuse.com/indexeddb" tit
 >le="http://caniuse.com/indexeddb">When Can I Use IndexedDB</a>
228    </p>
229    <p>
230      通过 <a href="https://github.com/axemclion/IndexedDBShim" tit
 >le="https://github.com/axemclion/IndexedDBShim">IndexedDB Polyfil
 >l</a> 也有可能在 <a href="http://caniuse.com/sql-storage" title="http:
 >//caniuse.com/sql-storage">支持 WebSQL 的浏览器</a> 上使用 IndexedDB。
231    </p>
232    <h2 id="See_also">
233      参见
234    </h2>
235    <ul>
236      <li>
237        <a href="/en-US/docs/IndexedDB/Basic_Concepts_Behind_Inde
 >xedDB" title="en-US/docs/IndexedDB/Basic Concepts Behind IndexedD
 >B">有关 IndexedDB 的一些基本概念</a>
238      </li>
239      <li>
240        <a href="/en-US/docs/IndexedDB/Using_IndexedDB" title="en
 >-US/docs/IndexedDB/IndexedDB primer">使用 IndexedDB</a>
241      </li>
242      <li>
243        <a class="external" href="http://hacks.mozilla.org/2012/0
 >2/storing-images-and-files-in-indexeddb/" title="http://hacks.moz
 >illa.org/2012/02/storing-images-and-files-in-indexeddb/">在 Indexe
 >dDB 中存储照片和文件</a>
244      </li>
245      <li>
246        <a class="external" href="http://www.html5rocks.com/tutor
 >ials/indexeddb/todo/" title="http://www.html5rocks.com/tutorials/
 >indexeddb/todo/">使用 HTML5 IndexedDB 的简单待办事项列表</a>. {{ Note("This 
 >tutorial is based on an old version of the specification and does
 > not work on up-to-date browsers: for example, it still uses the 
 >removed <code>setVersion()</code> method.") }}
247      </li>
248      <li>
249        <a class="external" href="http://www.w3.org/TR/IndexedDB/
 >" title="http://www.w3.org/TR/IndexedDB/">Indexed Database API 规范
 ></a>
250      </li>
251      <li>
252        <a class="external" href="http://msdn.microsoft.com/en-us
 >/scriptjunkie/gg679063.aspx" title="http://msdn.microsoft.com/en-
 >us/scriptjunkie/gg679063.aspx">IndexedDB — 使用浏览器存储</a>
253      </li>
254      <li>
255        <a class="external" href="http://caniuse.com/indexeddb" t
 >itle="http://caniuse.com/indexeddb">浏览器的 IndexedDB 支持情况</a>
256      </li>
257      <li>
258        <a class="external" href="http://nparashuram.com/IndexedD
 >B/trialtool/index.html" title="http://nparashuram.com/IndexedDB/t
 >rialtool/index.html">IndexedDB 示例</a>
259      </li>
260      <li>
261        <a href="https://github.com/axemclion/IndexedDBShim" titl
 >e="https://github.com/axemclion/IndexedDBShim">IndexedDB Polyfill
 ></a> 为仅支持WebSQL 的浏览器(例如移动版的 WebKit)
262      </li>
263      <li>
264        <a href="http://nparashuram.com/IndexedDBShim/" title="ht
 >tp://nparashuram.com/IndexedDBShim/">JQuery IndexedDB 插件</a>
265      </li>
266    </ul>

返回历史