IndexedDB n'est pas un key-value store comme l'est le stockage local. Le stockage local ne stocke que des chaînes de caractères, donc pour placer un objet dans le stockage local, l'approche habituelle est de JSON.stringify il :
myObject = {a: 1, b: 2, c: 3};
localStorage.setItem("uniq", JSON.stringify(myObject));
C'est parfait pour trouver l'objet avec la clé uniq
mais le seul moyen de récupérer les propriétés de monObjet à partir du stockage local est d'analyser l'objet en JSON et de l'examiner :
var myStorageObject = JSON.parse(localStorage.getItem("uniq"));
window.alert(myStorageObject.b);
Cela convient si vous n'avez qu'un seul ou quelques objets dans le stockage local. Mais imaginez que vous ayez un millier d'objets, qui ont tous une propriété b
et vous voulez faire quelque chose juste avec ceux-là. b==2
. Avec le stockage local, vous devrez faire une boucle dans tout le magasin et vérifier b
sur chaque élément, ce qui représente beaucoup de traitement gaspillé.
Avec IndexedDB, vous pouvez stocker des éléments autres que des chaînes de caractères dans la valeur : "Cela inclut des types simples tels que DOMString et Date ainsi que des instances d'objets et de tableaux." Non seulement cela, mais vous pouvez créer des index sur les propriétés des objets que vous avez stockés dans la valeur. Ainsi, avec IndexedDb, vous pouvez placer ces mêmes milliers d'objets dans la base, mais en créant un index sur l'objet b
et l'utiliser pour récupérer les objets dans lesquels b==2
sans avoir à scanner chaque objet du magasin.
Du moins, c'est l'idée. L'API IndexedDB n'est pas très intuitive.
Ils semblent s'exécuter dans le même thread que celui où les appels asynchrones ont été effectués. Comment cela ne va-t-il pas bloquer l'interface utilisateur ?
Asynchrone n'est pas synonyme de multithreading, JavaScript, en règle générale, n'est pas multithreadé. . Tout traitement lourd que vous effectuez en JS bloquera l'interface utilisateur, si vous voulez minimiser le blocage de l'interface utilisateur, essayez de Travailleurs du Web .
indexedDB permet un stockage plus important. Pourquoi ne pas augmenter la taille du magasin HTML5 ?
Parce que, sans une indexation appropriée, il serait de plus en plus lent au fur et à mesure qu'il s'agrandirait.