indexedDB在概念上与HTML5本地存储有什么不同?

  1. indexedDB和本地存储都是关键值存储。 有两个关键/价值商店有什么好处?
  2. indexedDB是asynchronous的,但连接(最耗时的)是手动的。 它们看起来像asynchronous调用一样在同一个线程中运行。 这将如何阻止用户界面?
  3. indexedDB允许一个更大的商店。 为什么不增加HTML5商店的大小?
  4. 我正在挠头。 indexedDB有什么意义?

与本地存储相同,IndexedDB不是键值存储。 本地存储只是存储string,所以要把一个对象放在本地存储中,通常的方法是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来做一些事情。 有了本地存储,你将不得不遍历整个商店,并检查每个项目,这是浪费的处理很多。

使用IndexedDB,您可以在string中存储除string之外的东西 :“这包括简单的types,如DOMString和Date以及Object和Array实例。 不仅如此,还可以在存储在值中的对象的属性上创build索引 。 因此,对于IndexedDb,您可以将相同的一千个对象放入其中,但在b属性上创build一个索引,并使用它来检索b==2的对象,而无需扫描存储中的每个对象。

至less是这个想法。 IndexedDB API不是很直观。

它们看起来像asynchronous调用一样在同一个线程中运行。 这将如何阻止用户界面?

asynchronous与multithreading不是一回事,通常,JavaScript不是multithreading的 。 在JS中执行的任何繁重处理都会阻塞UI,如果要尽量减less阻塞UI,请尝试Web Workers 。

indexedDB允许一个更大的商店。 为什么不增加HTML5商店的大小?

因为没有合适的索引,它会变得越来越慢。

添加到robertc的anwser,indexedDB知道'范围',所以你可以search和检索所有以'ab'开始并以'abd'结尾的logging来find'abc'等。