IndexedDB ist kein Schlüsselwertspeicher wie Local Storage. Im lokalen Speicher werden nur Zeichenfolgen gespeichert. Um ein Objekt in den lokalen Speicher zu verschieben , wird normalerweise JSON.stringify verwendet :
myObject = {a: 1, b: 2, c: 3};
localStorage.setItem("uniq", JSON.stringify(myObject));
Dies ist in Ordnung, um das Objekt mit dem Schlüssel zu uniq
finden. Die einzige Möglichkeit, die Eigenschaften von myObject aus dem lokalen Speicher wiederherzustellen, besteht darin, das Objekt mit JSON.parse zu untersuchen und zu untersuchen:
var myStorageObject = JSON.parse(localStorage.getItem("uniq"));
window.alert(myStorageObject.b);
Dies ist in Ordnung, wenn Sie nur ein oder mehrere Objekte im lokalen Speicher haben. Aber stellen Sie sich vor, Sie haben tausend Objekte, die alle eine Eigenschaft haben b
, und Sie möchten etwas nur mit denen tun, bei denen b==2
. Bei lokalem Speicher müssen Sie den gesamten Speicher durchlaufen und b
jeden Artikel überprüfen , was eine Menge verschwendeter Verarbeitung bedeutet.
Mit IndexedDB können Sie andere Dinge als Zeichenfolgen im Wert speichern : "Dies umfasst einfache Typen wie DOMString und Date sowie Objekt- und Array-Instanzen." Darüber hinaus können Sie Indizes für Eigenschaften der Objekte erstellen , die Sie im Wert gespeichert haben. Mit IndexedDb können Sie also dieselben tausend Objekte einfügen, aber einen Index für die b
Eigenschaft erstellen und damit nur die Objekte abrufen, bei denen b==2
nicht jedes Objekt im Geschäft gescannt werden muss.
Zumindest ist das die Idee. Die IndexedDB-API ist nicht sehr intuitiv.
Sie scheinen im selben Thread zu laufen wie die asynchronen Aufrufe. Wie wird dies die Benutzeroberfläche nicht blockieren?
Asynchron ist nicht dasselbe wie Multithreading, JavaScript ist in der Regel kein Multithreading . Jede schwere Verarbeitung, die Sie in JS ausführen, blockiert die Benutzeroberfläche. Wenn Sie die Blockierung der Benutzeroberfläche minimieren möchten, versuchen Sie es mit Web Workers .
indexedDB ermöglicht einen größeren Speicher. Warum nicht den HTML5-Store vergrößern?
Denn ohne ordnungsgemäße Indizierung würde es mit zunehmender Größe immer langsamer werden.