javascript - indexedDB 在概念上与 HTML5 本地存储有何不同?

标签 javascript html indexeddb

  1. indexedDB 和本地存储都是键值存储。是什么 拥有两个键/值存储的优势?
  2. indexedDB是异步的,但是join(最耗时的事情) 是手动的。它们似乎与异步调用在同一个线程中运行 被制成。这如何不阻塞用户界面?
  3. indexedDB 允许更大的存储。为什么不增加尺寸 HTML5 商店?
  4. 我正在挠头。 indexedDB 有什么意义?

最佳答案

IndexedDB 不像本地存储那样是键值存储。本地存储只存储字符串,因此要将对象放入本地存储,通常的方法是 JSON.stringify它:

myObject = {a: 1, b: 2, c: 3};
localStorage.setItem("uniq", JSON.stringify(myObject));

这对于查找具有键 uniq 的对象来说很好,但是从本地存储中取回 myObject 的属性的唯一方法是 JSON.parse 对象并检查它:

var myStorageObject = JSON.parse(localStorage.getItem("uniq"));
window.alert(myStorageObject.b);

如果本地存储中只有一个或几个对象,这很好。但是假设您有上千个对象,所有对象都具有属性 b,并且您只想对那些 b==2 的对象执行某些操作。使用本地存储,您必须遍历整个商店并检查每个项目的 b,这是大量浪费的处理。

使用 IndexedDB,您可以存储 stuff other than strings in the value :“这包括简单类型,例如 DOMString 和 Date 以及 Object 和 Array 实例。”不仅如此,你还可以create indexes关于您存储在值中的对象的属性。因此,使用 IndexedDb,您可以将相同的数千个对象放入其中,但在 b 属性上创建一个索引,并使用它来检索 b==2 的对象,而不会产生开销扫描商店中的每一件元素。

至少是这样。 IndexedDB API 不是很直观。

They appear to run in the same thread as the async calls were made. How will this not block the UI?

异步和多线程不是一回事,JavaScript, as a rule, is not multi-threaded .您在 JS 中进行的任何繁重处理都会阻塞 UI,如果您想尽量减少对 UI 的阻塞,请尝试 Web Workers .

indexedDB allows a larger store. Why not increase the size of the HTML5 store?

因为,如果没有适当的索引,它会变得越大越慢。

关于javascript - indexedDB 在概念上与 HTML5 本地存储有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924485/

相关文章:

javascript - 将数据从对象数组插入到 React Native 数组

html - 改变右边框的高度

javascript - 有没有办法将 IndexedDB 记录设为 "watch",以便我可以在更改时做出响应?

javascript - Firefox 上 Web Worker 中的 IndexedDB

indexeddb - `IDBOpenDBRequest` "error"事件在哪里冒泡?

javascript - 如何使用 JavaScript 将新列添加到行数未指定的表中

javascript - Bootstrap 导航栏下拉框不显示下拉菜单

javascript - 围绕其中心 Y 轴旋转立方体,第一次工作

javascript - 使用 js 启动 Google 语音识别会出错 - 不允许

javascript - 某些 Google map 功能在 Blogger 中使用时未显示