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 la 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 usado más 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 quitando 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 el almacenamiento de forma manual. Por lo tanto, si un usuario visita tu sitio con regularidad, es poco probable que se expulsen tus datos. Para evitar que el navegador borre tus datos, puedes solicitar que el almacenamiento de todo tu sitio se marque como persistente.
El almacenamiento persistente es compatible con muchos navegadores modernos.
Para obtener más información sobre la expulsión, la cantidad que 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. Si llamas a navigator.storage.persisted(), se 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 guardas datos críticos del usuario, y la solicitud debería estar incluida en un gesto del usuario. No solicites almacenamiento persistente cuando se cargue la página ni en otro código de bootstrap, ya que el navegador puede solicitar permiso al usuario. Si el usuario no hace nada que crea que debe guardarse, el mensaje puede ser confuso y es probable que rechace la solicitud. Además, no solicites con demasiada frecuencia. Si el usuario decide no otorgar permiso, no vuelvas a solicitarlo de inmediato en la próxima vez que guardes.
Solicita almacenamiento persistente
Para solicitar almacenamiento persistente para los datos de tu sitio, llama a navigator.storage.persist(). Muestra una promesa que se resuelve con un valor booleano, lo 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 otorgan permisos de almacenamiento persistente.
Chrome y otros navegadores basados en Chromium
Chrome y la mayoría de los otros navegadores basados en Chromium controlan 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 rechaza de forma 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?
- ¿Se instaló o marcó el sitio?
- ¿Se otorgó permiso al sitio para mostrar notificaciones?
Si se rechazó la solicitud, se puede volver a solicitar más adelante y se evaluará con la misma heurística.
Firefox
Firefox delega la solicitud de permiso al usuario. Cuando se solicita almacenamiento persistente, se le muestra al usuario una ventana emergente de la IU que le pregunta si permitirá que el sitio almacene datos en el 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 lo siguiente:
- API de Cache
- Cookies
- Almacenamiento DOM (almacenamiento local)
- API de File System (sistema de archivos proporcionado por el navegador y en espacio aislado)
- IndexedDB
- Service workers
- Caché de aplicación (obsoleta, no la uses)
- WebSQL (obsoleta, no la uses)
Cómo desactivar el almacenamiento persistente
En este momento, no hay una forma programática de indicarle al navegador que ya no necesitas almacenamiento persistente.
Conclusión
La investigación del equipo de Chrome muestra que, aunque es posible, Chrome rara vez borra los datos almacenados automáticamente. Para proteger los datos críticos que no se pueden almacenar en la nube o que provocarán una pérdida de datos significativa, el almacenamiento persistente puede ser una herramienta útil para garantizar que el navegador no quite tus datos cuando el dispositivo local se enfrente a la presión de almacenamiento. Recuerda que solo debes solicitar almacenamiento persistente cuando sea más probable que el usuario lo desee.
Gracias
Agradecemos especialmente a Victor Costan y Joe Medley por revisar este documento. Gracias a Chris Wilson, quien escribió la versión original de este documento que apareció por primera vez en WebFundamentals.