Almacenamiento persistente

El almacenamiento persistente puede ayudar a proteger los datos críticos de la expulsión y reducir la posibilidad de pérdida de datos.

Cuando se enfrentan a una presión de almacenamiento como poco espacio en el disco, los navegadores por lo general expulsarán datos, incluso de la API de Cache y de IndexedDB, del origen menos usado recientemente. Esto puede provocar la pérdida de datos si la app no sincronizó los datos con el servidor y reducir su confiabilidad, ya que se quitan los recursos necesarios para que funcione, lo que genera experiencias del usuario negativas.

Por suerte, la investigación del equipo de Chrome demuestra que Chrome rara vez borra los datos automáticamente. Es más común que los usuarios liguen el almacenamiento manualmente. Por lo tanto, si un usuario visita tu sitio con regularidad, las probabilidades de que se expulsen tus datos son pocas. Para evitar que el navegador borre tus datos, puedes solicitar que todo el almacenamiento del sitio se marque como persistente.

El almacenamiento persistente es compatible con muchos navegadores modernos.

Navegadores compatibles

  • 55
  • 79
  • 57
  • 15.2

Origen

Para obtener más información sobre las expulsiones, cuánto puedes almacenar y cómo manejar las limitaciones de cuota, consulta Almacenamiento para la Web.

Verifica si el almacenamiento de tu sitio se marcó como persistente

Puedes usar JavaScript para determinar si el almacenamiento de tu sitio se marcó como persistente. Llamar a navigator.storage.persisted() muestra una promesa que se resuelve con un valor booleano, lo que indica si el almacenamiento se marcó como persistente.

// Check if site's storage has been marked as persistent
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persisted();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

¿Cuándo debo solicitar almacenamiento persistente?

El mejor momento para solicitar que tu almacenamiento se marque como persistente es cuando ahorras datos fundamentales del usuario. Lo ideal es que la solicitud se incluya en un gesto del usuario. No solicites almacenamiento persistente cuando se cargue la página o en otro código de arranque, ya que es posible que el navegador solicite permiso al usuario. Si el usuario no está haciendo nada que cree que debe guardarse, la instrucción puede resultar confusa y es probable que rechace la solicitud. Además, no hagas solicitudes con demasiada frecuencia. Si el usuario decidió no otorgar el permiso, no vuelvas a preguntar de inmediato durante el siguiente guardado.

Cómo solicitar almacenamiento persistente

Si deseas solicitar almacenamiento continuo para los datos de tu sitio, llama a navigator.storage.persist(). Muestra una promesa que se resuelve con un valor booleano, que indica si se otorgó el permiso de almacenamiento persistente.

// Request persistent storage for site
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persist();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

¿Cómo se otorga el permiso?

El almacenamiento persistente se trata como un permiso. Los navegadores usan diferentes factores para decidir si otorgar permisos de almacenamiento persistente.

Chrome y otros navegadores basados en Chromium

Chrome y la mayoría de los demás navegadores basados en Chromium manejan automáticamente la solicitud de permiso y no muestran ninguna solicitud al usuario. En cambio, si un sitio se considera importante, el permiso de almacenamiento persistente se otorga automáticamente. De lo contrario, se rechaza de manera silenciosa.

La heurística para determinar si un sitio es importante incluye lo siguiente:

  • ¿Qué tan alto es el nivel de participación en el sitio?
  • ¿El sitio se instaló o agregó a favoritos?
  • ¿Se le otorgó permiso al sitio para mostrar notificaciones?

Si se rechazó, se puede volver a solicitar más tarde y se evaluará con la misma heurística.

Firefox

Firefox delega la solicitud de permiso al usuario. Cuando se solicita almacenamiento persistente, se muestra al usuario una ventana emergente en la IU para preguntarle si permitirá que el sitio almacene datos en almacenamiento persistente.

Una ventana emergente que muestra Firefox cuando un sitio solicita almacenamiento persistente.
Una ventana emergente que muestra Firefox cuando un sitio solicita almacenamiento persistente.

¿Qué almacenamiento está protegido por el almacenamiento persistente?

Si se otorga el permiso de almacenamiento persistente, el navegador no expulsará los datos almacenados en los siguientes lugares:

  • API de Cache
  • Unas galletas
  • Almacenamiento DOM (almacenamiento local)
  • API de File System (sistema de archivos de la zona de pruebas y proporcionado por el navegador)
  • IndexedDB
  • Trabajadores de servicio
  • Caché de la app (obsoleta, no debería usarse)
  • WebSQL (obsoleto, no se debe usar)

Cómo desactivar el almacenamiento persistente

En este momento, no existe una manera programática de indicarle al navegador que ya no necesitas almacenamiento persistente.

Conclusión

Las investigaciones del equipo de Chrome muestran que, aunque es posible, Chrome rara vez borra automáticamente los datos almacenados. Para proteger datos críticos que podrían no estar almacenados en la nube, o que supondrán una pérdida significativa de datos, el almacenamiento persistente puede ser una herramienta útil para garantizar que el navegador no quite tus datos cuando el dispositivo local se vea afectado por la presión de almacenamiento. Recuerda que solo debes solicitar almacenamiento persistente cuando sea más probable que el usuario lo quiera.

Gracias

Queremos dar un agradecimiento especial a Victor Costan y a Joe Medley por revisar este artículo. Gracias a Chris Wilson, quien escribió la versión original de este artículo que apareció por primera vez en WebFundamentals.

Hero image de Umberto en Unsplash