IndexedDB не является хранилищем значений ключей так же, как локальное хранилище. Локальное хранилище просто хранит строки, поэтому для помещения объекта в локальное хранилище обычно используется JSON.stringify it:
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 вы можете хранить вещи, отличные от строк, в значении : «Это включает в себя простые типы, такие как DOMString и Date, а также экземпляры Object и Array». Кроме того, вы можете создавать индексы для свойств объектов, которые вы сохранили в значении. Таким образом, с помощью IndexedDb вы можете поместить в него те же тысячи объектов, но создать индекс для свойства b
и использовать его для простого извлечения объектов, где b==2
, без дополнительных затрат на сканирование каждого объекта в магазине.
По крайней мере, это идея. API IndexedDB не очень интуитивно понятен.
Они, кажется, работают в том же потоке, что и асинхронные вызовы. Как это не заблокирует пользовательский интерфейс?
Асинхронный не то же самое, что многопоточный, JavaScript, как правило, не многопоточный . Любая тяжелая обработка, которую вы выполняете в JS, блокирует пользовательский интерфейс, если вы хотите минимизировать блокировку пользовательского интерфейса, попробуйте Web Workers .
indexedDB позволяет увеличить хранилище. Почему бы не увеличить размер магазина HTML5?
Потому что без надлежащей индексации она будет становиться все медленнее, чем больше.