En quoi indexedDB diffère-t-il conceptuellement du stockage local HTML5?

  1. tant la base de données indexée que le stockage local sont des valeurs clés. Qu'est-ce que l' avantage d'avoir deux magasins clé / valeur?
  2. indexedDB est asynchrone, mais rejoint (la chose la plus longue) sont manuel. Ils semblent s'exécuter dans le même fil que les appels asynchrones ont été faites. Comment cela va pas bloquer l'INTERFACE utilisateur?
  3. indexedDB permet un plus grand magasin. Pourquoi ne pas augmenter la taille de la Magasin HTML5?
  4. Je suis de me gratter la tête. À quoi sert indexedDB?
61
demandé sur Josh 2011-05-08 02:45:03

3 réponses

IndexedDB n'est pas un stock de valeurs clés de la même manière que le stockage Local. Le stockage Local ne stocke que les chaînes, donc pour mettre un objet dans le stockage local, l'approche habituelle est de JSON.stringify :

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

c'est très bien pour trouver l'objet avec la clé uniq , mais le seul moyen de récupérer les propriétés de myObject de l'entreposage local est à JSON.analysez l'objet et examinez-le:

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

C'est très bien si vous avez seulement un ou quelques objets, dans le local de stockage. Mais imaginez que vous avez un millier d'objets, tous qui ont une propriété b , et vous voulez faire quelque chose juste avec ceux où b==2 . Avec le stockage local, vous aurez à boucle à travers l'ensemble du magasin et de vérifier b sur chaque article, ce qui est beaucoup de gaspillage de traitement.

avec IndexedDB vous pouvez stocker stuff other than strings dans la valeur : "This 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é dans la valeur. Ainsi, avec IndexedDb, vous pouvez y placer ces mêmes milliers d'objets, mais créer un index sur la propriété b et l'utiliser pour simplement récupérer les objets où b==2 sans avoir à scanner chaque objet dans le magasin.

au moins c'est l'idée. L'API IndexedDB n'est pas très intuitive.

ils semblent fonctionner dans le même thread que les appels asynchrones. Comment cela va pas bloquer l'INTERFACE utilisateur?

Asynchrone n'est pas la même chose que le multi-thread, JavaScript, en règle générale, n'est pas multi-threadé . Tout traitement lourd que vous faites dans JS va bloquer L'UI, si vous voulez réduire au minimum le blocage de L'UI essayer travailleurs Web .

indexedDB permet un plus grand magasin. Pourquoi ne pas augmenter la taille du magasin HTML5?

parce que, sans indexation appropriée, il serait de plus en plus lent plus il a obtenu.

86
répondu robertc 2017-05-23 12:34:21

ajouter à l'anwser de robertc, indexedDB sait ' ranges 'de sorte que vous pouvez rechercher et récupérer tous les enregistrements qui commencent par' ab' et se terminent par 'abd' pour trouver ' abc ' etc.

5
répondu Johan 2011-07-01 07:00:41

j'ai trouvé ce bon article discutant de localstorage vs indexeddb et d'autres options possibles.

(toutes les valeurs ci-dessous sont en millisecondes)

https://nolanlawson.com/2015/09/29/indexeddb-websql-localstorage-what-blocks-the-dom /

memory comparison

Pour résumer de l'article (entièrement auteur vues),

  1. dans les trois de Chrome, Firefox, et Edge, LocalStorage bloque complètement le DOM pendant que vous écrivez des données 2. Le blocage est beaucoup plus visible qu'avec la mémoire, puisque le navigateur doit effectivement rincer vers le disque.
  2. il n'est pas surprenant que, puisque tout code synchrone bloque, les opérations en mémoire bloquent aussi. Le DOM bloque pendant les inserts de longue durée, mais à moins que vous ayez affaire à beaucoup de données, il est peu probable que vous remarquiez, parce que les opérations en mémoire sont très rapides.
  3. dans Firefox et Chrome, IndexedDB est plus lent que LocalStorage pour les insertions de valeurs clés de base, et il bloque toujours le DOM. Dans Chrome, il est aussi plus lent que WebSQL, ce qui bloque le DOM, mais pas autant. Ce n'est qu'en Edge et Safari que IndexedDB parvient à tourner en arrière-plan sans interrompre L'interface utilisateur, et ce qui est encore plus grave, ce sont les deux navigateurs qui n'implémentent que partiellement L'IndexedDB. specs.

  4. IndexedDB fonctionne remarquablement bien dans un web worker, où il fonctionne à peu près à la même vitesse, mais sans bloquer le DOM. La seule exception est Safari, qui ne supporte pas IndexedDB à l'intérieur d'un worker, mais qui ne bloque pas L'interface utilisateur.

  5. la mémoire locale est idéale si les données sont simples et minimales

2
répondu Amruta-Pani 2018-03-20 05:32:16