Archiviazione persistente

Lo spazio di archiviazione permanente può contribuire a proteggere i dati critici dall'espulsione e a ridurre le probabilità di perdita di dati.

Quando si trovano ad affrontare problemi di spazio di archiviazione, ad esempio poco spazio su disco, i browser solitamente estraggono i dati, anche dall'API Cache e da IndexedDB, dall'origine utilizzata meno di recente. Ciò potrebbe causare la perdita di dati se l'app non ha sincronizzato i dati con il server e ridurre l'affidabilità dell'app rimuovendo le risorse necessarie per il suo funzionamento, il che porta a esperienze utente negative.

Fortunatamente, la ricerca del team di Chrome mostra che i dati vengono raramente cancellati automaticamente da Chrome. È molto più comune che gli utenti eliminino manualmente lo spazio di archiviazione. Di conseguenza, se un utente visita il tuo sito regolarmente, le probabilità sono ridotte che i tuoi dati vengano eliminati. Per impedire al browser di eliminare i tuoi dati, puoi richiedere che lo spazio di archiviazione dell'intero sito sia contrassegnato come permanente.

Lo spazio di archiviazione permanente è supportato in molti browser moderni.

Supporto dei browser

  • Chrome: 55.
  • Edge: 79.
  • Firefox: 57.
  • Safari: 15.2.

Origine

Per scoprire di più sull'eliminazione, sulla quantità di spazio di archiviazione che è possibile archiviare e su come gestire i limiti di quota, consulta Spazio di archiviazione per il web.

Verificare se lo spazio di archiviazione del sito è stato contrassegnato come persistente

Puoi usare JavaScript per determinare se lo spazio di archiviazione del tuo sito è stato contrassegnato come permanente. La chiamata a navigator.storage.persisted() restituisce una promessa che si risolve con un valore booleano che indica se lo spazio di archiviazione è stato contrassegnato come permanente.

// 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}`);
}

Quando devo richiedere lo spazio di archiviazione permanente?

Il momento migliore per richiedere che lo spazio di archiviazione sia contrassegnato come permanente è quando salvi i dati utente critici e la richiesta idealmente dovrebbe essere aggregata in un gesto dell'utente. Non richiedere spazio di archiviazione permanente al caricamento della pagina o in altro codice di bootstrap. Il browser potrebbe richiedere all'utente l'autorizzazione. Se l'utente non sta facendo nulla che ritiene debba essere salvato, la richiesta potrebbe essere confusa e probabilmente rifiuterà la richiesta. Inoltre, non chiedere spesso. Se l'utente ha deciso di non concedere l'autorizzazione, non chiedere di nuovo subito al salvataggio successivo.

Richiedi archiviazione permanente

Per richiedere l'archiviazione permanente dei dati del tuo sito, chiama navigator.storage.persist(). Restituisce una promessa che si risolve con un valore booleano, che indica se l'autorizzazione di archiviazione permanente è stata concessa.

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

Come viene concessa l'autorizzazione?

L'archiviazione permanente viene trattata come un'autorizzazione. I browser usano diversi fattori per decidere se concedere autorizzazioni per l'archiviazione permanente.

Chrome e altri browser basati su Chromium

Chrome e la maggior parte degli altri browser basati su Chromium gestiscono automaticamente la richiesta di autorizzazione e non mostrano alcun messaggio all'utente. Se un sito viene considerato importante, viene concessa automaticamente l'autorizzazione per l'archiviazione permanente, altrimenti viene negata in modo automatico.

Le strategie di euristica per determinare se un sito è importante includono:

  • Quanto è elevato il livello di coinvolgimento del sito?
  • Il sito è stato installato o aggiunto ai preferiti?
  • Al sito è stata concessa l'autorizzazione per mostrare notifiche?

Se la richiesta è stata rifiutata, può essere richiesta di nuovo in un secondo momento e verrà valutata utilizzando le stesse procedure di euristica.

Firefox

Firefox delega la richiesta di autorizzazione all'utente. Quando viene richiesto lo spazio di archiviazione permanente, all'utente viene mostrato un popup dell'interfaccia utente che chiede se vuole consentire al sito di archiviare i dati nello spazio di archiviazione permanente.

Un popup mostrato da Firefox quando un sito richiede spazio di archiviazione permanente.
Popup mostrato da Firefox quando un sito richiede l'archiviazione permanente.

Quale spazio di archiviazione è protetto dall'archiviazione permanente?

Se viene concessa l'autorizzazione per l'archiviazione permanente, il browser non rimuoverà i dati archiviati in:

  • API Cache
  • Cookie
  • Spazio di archiviazione DOM (archiviazione locale)
  • API File System (file system fornito dal browser e in sandbox)
  • IndexedDB
  • Service worker
  • Cache dell'app (deprecata, non deve essere utilizzata)
  • WebSQL (deprecato, non deve essere utilizzato)

Come disattivare l'archiviazione permanente

Al momento non esiste un modo programmatico per comunicare al browser che non hai più bisogno di archiviazione permanente.

Conclusione

La ricerca del team di Chrome mostra che, sebbene sia possibile, i dati archiviati vengono raramente cancellati automaticamente da Chrome. Per proteggere i dati critici che potrebbero non essere archiviati nel cloud o che potrebbero comportare una perdita significativa di dati, l'archiviazione persistente può essere uno strumento utile per assicurarti che i tuoi dati non vengano rimossi dal browser quando il dispositivo locale è sotto pressione per lo spazio di archiviazione. Ricorda di richiedere l'archiviazione permanente solo quando è più probabile che l'utente lo voglia.

Grazie

Un ringraziamento speciale a Victor Costan e Joe Medley per aver letto questo articolo. Grazie a Chris Wilson che ha scritto la versione originale di questo articolo, pubblicata per la prima volta su WebFundamentals.

Immagine hero di Umberto su Unsplash