Almacenamiento persistente

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

Cuando nos enfrentamos a presiones por almacenamiento como lo es el poco espacio en disco, los navegadores normalmente desalojan los datos, incluso los de la API de Cache y los de IndexedDB, del origen menos utilizado recientemente. Esto puede causar la pérdida de datos si la aplicación no ha sincronizado los datos con el servidor y reducir la confiabilidad de la aplicación al eliminar los recursos necesarios para que funcione, lo cual genera experiencias negativas para el usuario.

Afortunadamente, la investigación realizada por el equipo de Chrome muestra que Chrome en raras ocasiones borra los datos automáticamente. Es mucho más común que los usuarios borren manualmente el almacenamiento. Por lo tanto, si un usuario visita tu sitio con regularidad, las posibilidades de que tus datos sean desalojados son escasas. Para evitar que el navegador elimine tus datos, puedes solicitar que todo el almacenamiento de tu sitio sea marcado como persistente.

El almacenamiento persistente es compatible con muchos navegadores modernos. Para obtener más información sobre el desalojo, cuánto puedes almacenar y cómo manejar las limitaciones de las cuotas, consulta Almacenamiento para la web.

Comprueba si el almacenamiento de tu sitio se ha marcado como persistente

Puedes utilizar JavaScript para determinar si el almacenamiento de tu sitio se ha marcado como persistente. Al llamar a navigator.storage.persisted() devuelve una Promesa que se resuelve con un booleano, lo que indica si el almacenamiento se ha marcado como persistente o no.

// Verifica si el alojamiento del sitio fue marcado como persistente
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persisted();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

¿Cuándo debo pedir el almacenamiento persistente?

El mejor momento para solicitar que tu almacenamiento se marque como persistente es cuando guardas los datos críticos del usuario y esa solicitud idealmente debería estar envuelta en un gesto de usuario. No solicites almacenamiento persistente en la carga de la página o en otro código de arranque dado que el navegador puede solicitar permiso al usuario. Si el usuario no está haciendo nada que crea que debe guardarse, el mensaje puede ser confuso y probablemente rechazará la solicitud. Además, no avises con demasiada frecuencia. Si el usuario decidió no otorgar el permiso, no vuelvas a preguntar inmediatamente en el próximo guardado.

Solicitar almacenamiento persistente

Para solicitar el almacenamiento persistente de los datos de tu sitio, llama a navigator.storage.persist(). Devuelve una Promesa que se resuelve con un booleano, lo que indica si se otorgó el permiso de almacenamiento persistente.

// Hace una solicitud de almacenamiento persistente al sitio
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persist();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

¿Cómo se concede el permiso?

El almacenamiento persistente se trata como un permiso. Los navegadores utilizan diferentes factores para decidir si otorgan permisos de almacenamiento persistentes.

Chrome y otros navegadores basados en Chromium

Chrome y la mayoría de los navegadores basados en Chromium manejan automáticamente la solicitud de permiso y no muestran ningún mensaje al usuario. En cambio, si un sitio se considera importante, el permiso de almacenamiento persistente se otorga automáticamente; de lo contrario, se niega silenciosamente.

Las heurísticas para determinar si un sitio es importante incluyen:

  • ¿Qué tan alto es el nivel de participación del sitio?
  • ¿El sitio ha sido instalado o marcado como favorito?
  • ¿Se le ha otorgado permiso al sitio para mostrar notificaciones?

Si la solicitud fue negada, se puede solicitar nuevamente más tarde y se evaluará utilizando la misma heurística.

Firefox

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

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

¿Qué almacenamiento está protegido por almacenamiento persistente?

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

  • API de Cache
  • Cookies
  • Almacenamiento DOM (almacenamiento local)
  • API de File Systems (sistema de archivos del navegador y en un espacio aislado)
  • IndexedDB
  • Service workers
  • Caché de aplicaciones (obsoleto, no debe usarse)
  • WebSQL (obsoleto, no debe usarse)

Cómo desactivar el almacenamiento persistente

En este momento, no existe una forma programática de decirle al navegador que ya no necesita almacenamiento persistente.

Conclusión

La investigación del equipo de Chrome muestra que, aunque es posible, Chrome rara vez borra automáticamente los datos almacenados. Para proteger los datos críticos que pueden no almacenarse en la nube, o que resultarán en una pérdida significativa de datos, el almacenamiento persistente puede ser una herramienta útil para garantizar que el navegador no elimine tus datos cuando el dispositivo local se enfrenta a una presión causada por el almacenamiento. Y recuerda, solicita el almacenamiento persistente solo cuando sea más probable que el usuario lo desee.

Gracias

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.

Imagen de héroe de Umberto en Unsplash