IndexedDB vs localStorage: qué almacenamiento del navegador usar

IndexedDB vs localStorage

IndexedDB vs localStorage: límites, velocidad y cuándo usarlos | We.Inc

Compara IndexedDB y localStorage lado a lado: límites de tamaño por navegador, síncrono frente a asíncrono, qué puede guardar cada uno y una demo en vivo que guarda una nota en ambos.

Elige localStorage para unos pocos ajustes pequeños: solo guarda cadenas, unos 5 MiB por origen, y cada llamada bloquea la página hasta que termina. Elige IndexedDB para datos de verdad: es asíncrono, transaccional, guarda objetos, fechas y archivos, y su cuota es una parte del disco. La demo de abajo escribe una nota en ambos.

La versión corta

Ambas API conservan los datos en el navegador del visitante después de cerrar la pestaña, y ambas están limitadas al origen de la página. La diferencia es el peso. localStorage es un pequeño mapa síncrono de cadenas que aprendes en un minuto; IndexedDB es una pequeña base de datos con versiones, almacenes de objetos y transacciones. Esta página muestra los límites reales de la documentación y te deja ver qué devuelve cada una.

Preguntas frecuentes

¿Cuánto puede guardar localStorage?

MDN documenta un límite de 5 MiB de almacenamiento local y 5 MiB de almacenamiento de sesión por origen, 10 MiB en total. Como los valores son cadenas UTF-16, el número de caracteres que caben puede ser menor de lo que esperas. Superar el límite lanza un QuotaExceededError.

¿Cuánto puede guardar IndexedDB?

Depende del navegador y del disco. Los navegadores Chromium permiten a un origen hasta el 60% del tamaño total del disco. Firefox permite lo menor entre el 10% del disco o 10 GiB por grupo de sitios en modo best-effort. Las apps del navegador Safari permiten alrededor del 60% del disco. Usa navigator.storage.estimate() para leer la cifra real.

¿Es IndexedDB más rápido que localStorage?

Para un único valor pequeño, localStorage suele ser más rápido de escribir en código y lo bastante rápido al ejecutarse. El problema es que es síncrono, así que las lecturas y escrituras grandes congelan el hilo principal. IndexedDB hace el trabajo fuera del flujo principal y te avisa cuando termina, lo que mantiene fluidos el desplazamiento y la escritura.

¿Puede el navegador borrar mis datos de IndexedDB?

Sí. Por defecto el almacenamiento es best-effort, así que el navegador puede expulsar los datos de un origen cuando el disco va justo. Pedir navigator.storage.persist() cambia al modo persistente, en el que solo la persona puede borrarlos. Firefox muestra una solicitud de permiso; Chrome y Safari deciden según cómo use la persona el sitio.

¿Debo usar localStorage para un token de inicio de sesión?

No. Cualquier script de la página, incluido uno inyectado, puede leer localStorage e IndexedDB. Guarda los identificadores de sesión en cookies marcadas como HttpOnly, Secure y SameSite, que los scripts de la página no pueden leer.

Por qué importa que sea síncrono

Cadenas frente a clonado estructurado

Una regla sencilla para elegir

Límites de almacenamiento por navegador

Cifras según la página de cuotas de almacenamiento de MDN. IndexedDB, la Cache API y el sistema de archivos privado del origen comparten la misma cuota.

Cuota por origen

El mismo guardado en ambas API

localStorage: stringify, protección y parse

El try...catch gestiona un almacén lleno o bloqueado. La fecha hay que reconstruirla a mano después de analizarla.

IndexedDB: abrir, actualizar y escribir en una transacción

onupgradeneeded se ejecuta la primera vez y cada vez que sube el número de versión; es el único sitio donde se crean almacenes de objetos.

Pregunta cuánto espacio tienes y pide conservarlo

estimate() devuelve recuentos aproximados de bytes. persist() se resuelve como true si el navegador concedió almacenamiento persistente.

Guarda una nota en ambos almacenes

Esta demo se ejecuta solo en tu navegador. Escribe bajo la clave we-demo-note y en una base de datos llamada we-demo-db, y el botón Borrar elimina ambas.

Nota para guardar

Telefonear a la imprenta el viernes

Guardar en ambos

Leer de nuevo

Comprobar cuota

Borrar datos de la demo

Todavía no se ha leído nada. Guarda una nota y pulsa Leer de nuevo.

localStorage devolvió

IndexedDB devolvió

Tipo: {v}

savedAt es un Date: {v}

No hay nada guardado

Nota guardada en localStorage e IndexedDB.

Clave y base de datos de la demo eliminadas.

Este origen usa unos {n} MB de aproximadamente {v} MB disponibles.

Este navegador no ofrece navigator.storage.estimate().

El almacenamiento falló en este navegador: {v}

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio