Archiviazione persistente

L'archiviazione permanente può aiutare a proteggere i dati critici dall'eliminazione e a ridurre la possibilità di perdere i dati.

A fronte di pressioni di archiviazione come lo spazio su disco ridotto, i browser in genere elimineranno i dati, anche dall'API Cache e dall'IndexedDB, dall'origine utilizzata meno di recente. Ciò potrebbe causare una perdita di dati se l'app non ha sincronizzato i dati con il server e ridurne l'affidabilità rimuovendo le risorse necessarie per il funzionamento dell'app. Entrambe le situazioni comportano un'esperienza utente negativa.

Per fortuna, una ricerca del team di Chrome mostra che i dati vengono cancellati automaticamente da Chrome. È molto più comune per gli utenti cancellare 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.

L'archiviazione permanente è supportata in molti browser moderni.

Supporto dei browser

  • 55
  • 79
  • 57
  • 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.

Controllare se lo spazio di archiviazione del sito è stato contrassegnato come permanente

Puoi usare JavaScript per determinare se lo spazio di archiviazione del tuo sito è stato contrassegnato come permanente. La chiamata di navigator.storage.persisted() restituisce una promessa che viene risolta 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 l'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 l'archiviazione permanente al caricamento pagina o in un altro codice di bootstrap: il browser potrebbe richiedere l'autorizzazione all'utente. Se l'utente non sta facendo nulla che ritiene debba essere salvato, il prompt potrebbe confondere e probabilmente respinge la richiesta. Inoltre, non fare prompt troppo frequentemente. Se l'utente ha deciso di non concedere l'autorizzazione, non chiederla di nuovo immediatamente 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 booleano, che indica se è stata concessa l'autorizzazione per l'archiviazione permanente.

// 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 è considerata 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 alcuna richiesta all'utente. Se un sito viene considerato importante, l'autorizzazione per l'archiviazione permanente viene concessa automaticamente, altrimenti viene negata in modo automatico.

Le euristiche per determinare se un sito è importante includono:

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

Se la richiesta è stata rifiutata, potrà essere richiesta di nuovo in un secondo momento e verrà valutata utilizzando la stessa euristica.

Firefox

Firefox delega la richiesta di autorizzazione all'utente. Quando viene richiesta l'archiviazione permanente, all'utente viene visualizzato un popup dell'interfaccia utente che chiede se il sito può archiviare i dati nell'archiviazione permanente.

Un popup mostrato da Firefox quando un sito richiede l'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
  • Biscotti
  • Archiviazione DOM (archiviazione locale)
  • API File System (file system fornito dal browser e con 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 indicare al browser che non hai più bisogno di spazio di archiviazione permanente.

Conclusione

Una ricerca del team di Chrome dimostra che, sebbene possibile, i dati memorizzati vengono raramente cancellati automaticamente da Chrome. Per proteggere dati critici che potrebbero non essere archiviati nel cloud o comportare una perdita significativa di dati, l'archiviazione permanente può essere uno strumento utile per garantire che i dati non vengano rimossi dal browser quando il dispositivo locale si trova ad affrontare problemi di 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 che è apparsa per la prima volta su WebFundamentals.

Immagine hero di Umberto su Unsplash