IndexedDB no es un almacén de valores-clave de la misma forma que el almacenamiento local. El almacenamiento local solo almacena cadenas, por lo que para poner un objeto en el almacenamiento local, el enfoque habitual es JSON .
myObject = {a: 1, b: 2, c: 3};
localStorage.setItem("uniq", JSON.stringify(myObject));
Esto está bien para encontrar el objeto con la clave uniq
, pero la única forma de recuperar las propiedades de myObject del almacenamiento local es analizar JSON, analizar el objeto y examinarlo:
var myStorageObject = JSON.parse(localStorage.getItem("uniq"));
window.alert(myStorageObject.b);
Esto está bien si solo tiene uno o algunos objetos en el almacenamiento local. Pero imagina que tienes mil objetos, todos los cuales tienen una propiedad b
, y quieres hacer algo solo con aquellos donde b==2
. Con el almacenamiento local, tendrá que recorrer toda la tienda y verificar b
cada artículo, lo cual es una gran cantidad de procesamiento desperdiciado.
Con IndexedDB puede almacenar otras cosas que no sean cadenas en el valor : "Esto incluye tipos simples como DOMString y Date, así como instancias de Object y Array". No solo eso, sino que puede crear índices en las propiedades de los objetos que almacenó en el valor. Entonces, con IndexedDb puede colocar esos mismos mil objetos en él, pero crear un índice en la b
propiedad y usarlo para recuperar los objetos b==2
sin la sobrecarga de escanear cada objeto en la tienda.
Al menos esa es la idea. La API IndexedDB no es muy intuitiva.
Parece que se ejecutan en el mismo hilo que se realizaron las llamadas asíncronas. ¿Cómo no bloqueará esto la interfaz de usuario?
Asincrónico no es lo mismo que multiproceso, JavaScript, por regla general, no es multiproceso . Cualquier procesamiento pesado que realice en JS bloqueará la interfaz de usuario, si desea minimizar el bloqueo de la interfaz de usuario, pruebe con Web Workers .
indexedDB permite una tienda más grande. ¿Por qué no aumentar el tamaño de la tienda HTML5?
Porque, sin la indexación adecuada, se volvería cada vez más lento cuanto más grande se hiciera.