Almacenamiento persistente

El almacenamiento persistente puede ayudar a proteger datos críticos contra 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 suelen expulsar datos, incluidos los de la API de Cache y IndexedDB, del origen que se usó menos recientemente. Esto puede provocar la pérdida de datos si la app no sincronizó los datos con el servidor y reducir la confiabilidad de la app, ya que se quitan los recursos necesarios para que funcione, lo que genera experiencias del usuario negativas.

Afortunadamente, la investigación del equipo de Chrome demuestra que Chrome rara vez borra los datos automáticamente. Es mucho más común que los usuarios liberen almacenamiento de forma manual. Por lo tanto, si un usuario visita tu sitio con frecuencia, las posibilidades son pequeñas de que tus datos sean expulsados. Para evitar que el navegador borre tus datos, puedes solicitar que todo el almacenamiento de tu 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 la expulsión, cuánto puedes almacenar y cómo controlar 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, 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 guardas datos críticos del usuario. Idealmente, la solicitud debería encerrarse en un gesto del usuario. No solicites almacenamiento persistente cuando se carga la página o, en otro código de arranque, es posible que el navegador le solicite permiso al usuario. Si el usuario no hace nada que cree que debe guardarse, el mensaje puede resultar confuso y es probable que rechace la solicitud. Además, no solicites con demasiada frecuencia. Si el usuario decidió no otorgar el permiso, no vuelvas a solicitarlo de inmediato en el siguiente guardado.

Solicita almacenamiento persistente

Si quieres solicitar almacenamiento persistente para los datos del 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 considera 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 le muestran ningún mensaje al usuario. En cambio, si se considera que un sitio es importante, el permiso de almacenamiento persistente se otorga automáticamente; de lo contrario, se rechaza en silencio.

Estas son algunas de las heurísticas para determinar si un sitio es importante:

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

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

Firefox

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

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 protege 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 proporcionado por el navegador y de zona de pruebas)
  • IndexedDB
  • Trabajadores de servicio
  • Caché de la app (obsoleta, no se debe usar)
  • WebSQL (obsoleto, no debe usarse)

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 demuestran que, aunque sea posible, Chrome rara vez borra los datos almacenados de forma automática. Para proteger datos importantes que tal vez no se almacenen en la nube o que generen una pérdida significativa de datos, el almacenamiento continuo puede ser una herramienta útil para garantizar que el navegador no quite los datos cuando el dispositivo local se enfrente a una presión de almacenamiento. Recuerda que solo debes solicitar almacenamiento persistente cuando sea más probable que el usuario lo desee.

Gracias

Queremos dar un agradecimiento especial a Victor Costan y 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