Hay una serie de tecnologías web que almacenan datos de un tipo u otro en el lado del cliente (es decir, en su disco local). El proceso mediante el cual el navegador calcula cuánto espacio asignar al almacenamiento de datos web y qué eliminar cuando se alcanza ese límite no es simple y difiere entre los navegadores. Este artículo describe cómo los navegadores determinan qué contenido local purgar y cuándo para liberar el espacio de almacenamiento local necesario.

Nota: La información a continuación debería ser bastante precisa para la mayoría de los navegadores modernos, pero los detalles del navegador se indican cuando se conocen. Opera y Chrome deberían comportarse igual en todos los casos. mini Opera (renderizado del lado del servidor todavía basado en presto) no almacena ningún dato en el cliente.

¿Qué tecnologías utilizan el almacenamiento de datos del navegador?

En Firefox, las siguientes tecnologías utilizan el almacenamiento de datos del navegador para almacenar datos cuando es necesario. Los denominamos “clientes de cuota” en este contexto:

  • IndexedDB
  • asm.js almacenamiento en caché
  • API de caché
  • Galletas

Nota: En Firefox, Web Storage pronto comenzará a utilizar las mismas herramientas de administración de almacenamiento, como se describe en este documento.

Nota: En el modo de navegación privada, no se admite la mayor parte del almacenamiento de datos. Los datos de almacenamiento local y las cookies todavía se almacenan, pero son efímeros: los datos se eliminan cuando cierra la última ventana de navegación privada.

La “hora de último acceso” de los orígenes se actualiza cuando cualquiera de estos se activa / desactiva; el desalojo de origen eliminará los datos de todos estos clientes de cuota.

En Chrome / Opera, la API de administración de cuotas maneja la administración de cuotas para AppCache, IndexedDB, WebSQL y API del sistema de archivos.

Diferentes tipos de almacenamiento de datos.

Incluso en el mismo navegador, utilizando el mismo método de almacenamiento, existen diferentes clases de almacenamiento de datos para comprender. Esta sección analiza los diferentes que puede encontrar en diferentes navegadores.

El almacenamiento viene en dos tipos:

  • Persistente: se trata de datos que están destinados a conservarse durante mucho tiempo. Esto solo se desalojará si el usuario así lo desea (por ejemplo, en Firefox puede elegir eliminar todos los datos almacenados o solo los datos almacenados de los orígenes seleccionados yendo a Preferencias y usando las opciones debajo Privacidad y seguridad> Cookies y datos del sitio).
  • Temporal: estos son datos que no necesitan persistir durante mucho tiempo. Esto será desalojado bajo un uso menos reciente (política de LRU) cuando se alcancen los límites de almacenamiento.

En Firefox, cuando se usa almacenamiento persistente, el usuario recibe una ventana emergente de IU para alertarle de que estos datos persistirán y le pregunta si está satisfecho con eso. El almacenamiento temporal de datos no genera ningún mensaje para el usuario.

El almacenamiento es temporal de forma predeterminada; Los desarrolladores pueden optar por utilizar el almacenamiento persistente para sus sitios mediante la StorageManager.persist() método disponible en la API de almacenamiento.

¿Dónde se almacenan los datos?

Cada tipo de almacenamiento representa un repositorio independiente. Aquí está la asignación real a directorios bajo el perfil de Firefox de un usuario (otros navegadores pueden diferir levemente):

  • /storage – el directorio principal de nivel superior para los almacenamientos mantenidos por el administrador de cuotas (ver más abajo)
  • /storage/permanent – repositorio de almacenamiento de datos persistentes
  • /storage/temporary – repositorio de almacenamiento de datos temporal
  • /storage/default – repositorio de almacenamiento de datos predeterminado

Nota: Después de introducir la API de almacenamiento, la carpeta “permanente” puede considerarse obsoleta; la carpeta “permanente” solo almacena bases de datos de tipo persistente IndexedDB. No importa si el modo de caja es “mejor esfuerzo” o “persistente”: los datos se almacenan en / almacenamiento / predeterminado.

Nota: En Firefox, puede encontrar la carpeta de su perfil ingresando about:support en la barra de URL y presionando el Mostrar en… botón (p. ej., Mostrar en el Finder en Mac OS X) junto al Carpeta de perfil título.

Nota: Si está buscando en su perfil los datos almacenados, es posible que vea una cuarta carpeta: persistent. Básicamente, el persistent se cambió el nombre de la carpeta a permanent hace un tiempo para simplificar las actualizaciones / migraciones.

Nota: Los usuarios no deben agregar sus propios directorios o archivos en /storage. Esto hará que falle la inicialización del almacenamiento; por ejemplo, open() disparará un evento de error.

Límites de almacenamiento

El espacio máximo de almacenamiento del navegador es dinámico: se basa en el tamaño de su disco duro. los límite global se calcula como el 50% del espacio libre en disco. En Firefox, una herramienta de navegador interna llamada Quota Manager realiza un seguimiento de la cantidad de espacio en disco que utiliza cada origen y elimina los datos si es necesario.

Entonces, si su disco duro es de 500 GB, entonces el almacenamiento total de un navegador es de 250 GB. Si se excede, un proceso llamado desalojo de origen entra en juego, eliminando todo el valor de los datos de un origen hasta que la cantidad de almacenamiento vuelva a estar por debajo del límite. No se ha implementado ningún efecto de recorte para eliminar partes de los orígenes; eliminar una base de datos de un origen podría causar problemas de inconsistencia.

También hay otro límite llamado límite de grupo – esto se define como el 20% del límite global, pero tiene un mínimo de 10 MB y un máximo de 2 GB. Cada origen es parte de un grupo (grupo de orígenes). Hay un grupo para cada dominio eTLD + 1. Por ejemplo:

  • mozilla.org – grupo1, origen1
  • www.mozilla.org – grupo1, origen2
  • joe.blogs.mozilla.org – grupo1, origen3
  • firefox.com – grupo2, origen4

En este grupo, mozilla.org, www.mozilla.org, y joe.blogs.mozilla.org puede utilizar en conjunto un máximo del 20% del límite global. firefox.com tiene un máximo separado del 20%.

Los dos límites reaccionan de manera diferente a los límites que se alcanzan:

  • El límite de grupo también se denomina “límite estricto”: no desencadena el desalojo de origen.
  • El límite global es un “límite suave” ya que existe la posibilidad de que se libere algo de espacio y la operación pueda continuar.

Nota: El límite de grupo no puede ser mayor que el límite global, a pesar del límite de grupo mínimo mencionado anteriormente. Si tuviera una situación de memoria muy baja en la que el límite global fuera, digamos, 8 MB, entonces el límite de grupo también sería 8 MB.

Nota: Si se excede el límite del grupo, o si el desalojo de origen no pudo liberar suficiente espacio, el navegador arrojará un QuotaExceededError.

Nota: En Chrome, los límites de la cuota de almacenamiento duro y flexible han cambiado desde M66. Se puede encontrar más información aquí.

Política de LRU

Cuando se llena el espacio disponible en el disco, el administrador de cuotas comenzará a borrar los datos según una política de LRU: primero se eliminará el origen utilizado menos recientemente, luego el siguiente, hasta que el navegador ya no supere el límite.

Realizamos un seguimiento de la “última hora de acceso” de cada origen mediante el almacenamiento temporal. Una vez que se alcanza el límite global para el almacenamiento temporal (más sobre el límite más adelante), intentamos encontrar todos los orígenes que no se utilizan actualmente (es decir, aquellos sin pestañas / aplicaciones abiertas que mantienen los almacenes de datos abiertos). A continuación, se ordenan según la “hora del último acceso”. Los orígenes utilizados menos recientemente se eliminan hasta que haya espacio suficiente para cumplir con la solicitud que desencadenó este desalojo de origen.

Ver también