Saltar al contenido

IndexedDB en JavaScript

IndexedDB es una API de almacenamiento del lado del cliente potente y robusta, más que otras soluciones de almacenamiento local disponibles en los navegadores web. Permite almacenar y manipular grandes cantidades de datos estructurados de forma asíncrona mediante aplicaciones web. IndexedDB es ideal para aplicaciones que requieren almacenamiento de datos sin conexión, alto rendimiento y capacidades de consulta avanzadas sin depender de una conexión de red.

Configuración de una base de datos IndexedDB

Paso 1: Abrir una base de datos

Para usar IndexedDB, el primer paso es abrir una base de datos. Así es como puedes crear o abrir una base de datos IndexedDB. Después de una operación exitosa, cerramos la base de datos para evitar efectos secundarios no deseados en otros ejemplos. Puedes omitir este paso en tu propio código, o incluirlo si es necesario.

Advertencia: Llamar a deleteDatabase() borrará todos los datos de esta base de datos. Esto es solo para fines de prueba y no debe usarse en producción.


Output appears here after Run.

Paso 2: Crear almacenes de objetos

Una vez abierta la base de datos, puedes proceder a crear un almacén de objetos, que es similar a una tabla en las bases de datos relacionales. Ten en cuenta que esto solo se puede hacer durante una actualización de versión (al abrir la base de datos con un número de versión mayor). El evento que debes escuchar es onupgradeneeded.


Output appears here after Run.

Transacciones

Una vez configuradas tu base de datos y los almacenes de objetos, necesitarás gestionar las operaciones de datos mediante transacciones. Una transacción en IndexedDB es un mecanismo que agrupa múltiples operaciones en una única unidad de trabajo que tiene éxito por completo o falla por completo. Es esencial para garantizar la consistencia e integridad de los datos, especialmente cuando múltiples operaciones dependen unas de otras para producir un resultado correcto.

Cómo usar transacciones en IndexedDB

Paso 1: Iniciar una transacción

Para realizar cualquier operación en IndexedDB, comienza creando una transacción en una base de datos. Una transacción se crea especificando qué almacenes de objetos involucrará y el modo de la transacción, que puede ser "readonly" o "readwrite".

Paso 2: Acceder a un almacén de objetos

Dentro de una transacción, puedes acceder a uno o más almacenes de objetos para realizar operaciones de datos.

Paso 3: Realizar operaciones

Una vez que tengas acceso a un almacén de objetos, puedes ejecutar varias operaciones como agregar, recuperar, actualizar o eliminar datos. Cada operación devuelve un objeto de solicitud que puedes usar para manejar eventos de éxito o error.

Paso 4: Completar la transacción

Una transacción se completará automáticamente una vez que todas las operaciones emitidas en ella se hayan resuelto, ya sea con éxito o fallando. También puedes escuchar el evento complete en la transacción para realizar acciones después de que todas las operaciones hayan terminado con éxito.

Aquí tienes un ejemplo de una transacción completa:


Output appears here after Run.

Lectura de datos

Para recuperar datos, usa store.get(key) o un cursor para iterar sobre varios registros. Aquí tienes ejemplos rápidos:

Recuperar un solo registro:


Output appears here after Run.

Iterar con un cursor:


Output appears here after Run.

Actualización y eliminación de registros

Para modificar datos existentes, usa store.put() con la misma clave. Para eliminar datos, usa store.delete(key).

Actualizar un registro:


Output appears here after Run.

Eliminar un registro:


Output appears here after Run.

Cómo ver el contenido de IndexedDB en tu navegador

Después de almacenar y manipular datos, es posible que quieras inspeccionar lo que realmente se ha guardado en tu navegador. La mayoría de los navegadores modernos te muestran lo que está almacenado en IndexedDB. A continuación se muestra un ejemplo de las herramientas de desarrollo de Chrome:

IndexedDB

Mejores prácticas para usar transacciones

Para garantizar que tu implementación de IndexedDB sea confiable y tenga buen rendimiento, sigue estas directrices:

  1. Minimiza el alcance: Mantén las transacciones lo más pequeñas posible, tanto en número de operaciones como en duración. Esto reduce la probabilidad de conflictos y mejora el rendimiento.
  2. Manejo de errores: Implementa siempre el manejo de errores tanto a nivel de solicitud como de transacción. Esto ayuda a diagnosticar problemas y prevenir actualizaciones parciales que podrían provocar corrupción de datos.
  3. Concurrencia: Comprende que, aunque IndexedDB es asíncrono y no bloqueante, las transacciones en la misma base de datos se encolan y ejecutan de forma serial para evitar carreras de datos e inconsistencias.

Conclusión

IndexedDB proporciona una plataforma robusta para la gestión compleja de datos en aplicaciones web, lo que la convierte en una herramienta esencial para los desarrolladores web modernos. Mediante la implementación adecuada de sus funciones, los desarrolladores pueden almacenar, recuperar, actualizar y eliminar datos del lado del cliente de manera eficiente, mejorando el rendimiento de la aplicación y la experiencia del usuario.

Práctica

¿Cuáles son las características de IndexedDB en JavaScript?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.