Define el alcance en las transacciones de IndexedDB

¿Qué es IndexedDB?

IndexedDB es un estándar web en evolución para el almacenamiento de cantidades significativas de datos estructurados en el navegador y para las búsquedas de alto rendimiento en estos datos usando índices. En otras palabras, IndexedDB es un almacén de objetos. No es lo mismo que una base de datos relacional, que tiene tablas con filas y columnas de colecciones. Es una diferencia importante y fundamental que afecta la forma en que diseñas y compilas tus aplicaciones (obtén más información sobre los conceptos básicos).

Entonces, ¿cuáles son las novedades?

Cambia mis amigos... tenemos algunos cambios que arrojarán algunos errores si no los manejamos con un simple cambio de sintaxis.

A partir de la versión 17, Chrome ahora mostrará un error si una transacción de IndexedDB no tiene alcance en un almacén de objetos. Dado que toda la lectura y escritura de datos se realiza dentro de las transacciones, necesitamos crear una transacción en una base de datos, especificar el alcance (por ejemplo, a qué almacenes de objetos deseas acceder) y determinar el tipo de acceso (solo lectura o escritura).

¿Qué significa en el código? Bueno, en lugar de pasar un array vacío a database.transaction:

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

Debes definir el alcance a un almacén de objetos en particular o a una lista de almacenes de objetos:

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

Puedes acelerar el acceso a los datos usando el alcance y el modo adecuados en la transacción. Algunos consejos: Cuando definas el alcance, especifica solo los almacenes de objetos que necesitas. De esta manera, puedes ejecutar varias transacciones con alcances no superpuestos de forma simultánea. Especifica un modo de transacción READ_WRITE solo cuando sea necesario. Puedes ejecutar varias transacciones de READ_ONLY con alcances superpuestos de forma simultánea, pero solo puedes tener una transacción READ_WRITE por almacén de objetos.

Otras fuentes:

Así que hasta la próxima... No dejes de enviar la Web a territorios cercanos.