Skip to main content

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


Actualizado

Cuando se enfrentan a presiones de almacenamiento como poco espacio en disco, los navegadores normalmente desalojarán los datos, incluso de la API de caché e IndexedDB, del origen menos utilizado recientemente. Esto puede provocar 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 que genera experiencias negativas para el usuario.

Afortunadamente, la investigación del equipo de Chrome muestra que Chrome rara vez 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 su sitio con regularidad, hay pocas posibilidades de que sus datos sean desalojados. Para evitar que el navegador elimine sus datos, puede solicitar que todo el almacenamiento de su sitio se marque como persistente.

Solicitar que todos los datos de su sitio se marquen como persistentes solo debe hacerse para datos críticos (por ejemplo, claves de cifrado de extremo a extremo) que, si no se respaldan en la nube, podrían resultar en una pérdida significativa de datos si no se guardan. El navegador no elimina el almacenamiento persistente, incluso si el almacenamiento se está agotando. Solo se eliminará si el usuario elige eliminarlo a través de la configuración de su sitio.

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

Compruebe si el almacenamiento de su sitio se ha marcado como persistente

Puede utilizar JavaScript para determinar si el almacenamiento de su sitio se ha marcado como persistente. Vocación navigator.storage.persisted() devuelve una Promesa que se resuelve con un booleano, lo que indica si el almacenamiento se ha marcado como persistente.


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 su almacenamiento se marque como persistente es cuando guarda datos críticos del usuario, y la solicitud debería estar envuelta idealmente en un gesto de usuario. No solicite almacenamiento persistente en la carga de la página, o en otro código de arranque, 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 avise con demasiada frecuencia. Si el usuario decidió no otorgar el permiso, no vuelva a preguntar inmediatamente en el próximo guardado.

Solicitar almacenamiento persistente

Para solicitar almacenamiento persistente para los datos de su sitio, llame
navigator.storage.persist(). Devuelve una Promise que se resuelve con un booleano, que indica si se otorgó el permiso de almacenamiento persistente.


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

Los nombres de API para cheque si el almacenamiento de su sitio ya se ha marcado como persistente, y solicitud el almacenamiento persistente es muy similar. La forma en que recuerdo la diferencia es persisted() es tiempo pasado y se usa para verificar si ya persisteed. Mientras persist() está en tiempo presente y lo pide ahora.

¿Cómo se concede el permiso?

El almacenamiento persistente se trata como 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 demás 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 deniega silenciosamente.

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

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

Si la solicitud fue denegada, 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 almacenamiento persistente, se le solicita al usuario una ventana emergente de IU preguntando si permitirá que el sitio almacene datos en almacenamiento persistente.

ff-persist-request-4761055

Una ventana emergente que muestra Firefox cuando un sitio solicita 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 caché
  • Galletas
  • Almacenamiento DOM
  • API del sistema de archivos (sistema de archivos provisto por el navegador y en espacio aislado)
  • IndexedDB
  • Trabajadores de servicios
  • 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 sus datos cuando el dispositivo local se enfrenta a la presión del almacenamiento. Y recuerde, solicite 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 heroica de Umberto en Unsplash