Archiviazione persistente

L'archiviazione permanente può aiutare a proteggere i dati critici dalla rimozione e a ridurre le probabilità di perdita.

Di fronte a una pressione di archiviazione come lo spazio su disco insufficiente, i browser in genere eliminano i dati, ad esempio dall'API Cache e IndexedDB, dall'origine utilizzata meno di recente. Ciò può 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 funzionamento dell'app. Entrambi i casi possono portare a esperienze utente negative.

Fortunatamente, una ricerca del team di Chrome dimostra che molto raramente i dati vengono cancellati automaticamente da Chrome. È molto più comune per gli utenti cancellare manualmente lo spazio di archiviazione. Pertanto, se un utente visita regolarmente il tuo sito, le probabilità che i tuoi dati vengano rimossi sono ridotte. Per impedire al browser di eliminare i tuoi dati, puoi richiedere che lo spazio di archiviazione dell'intero sito venga contrassegnato come permanente.

L'archiviazione permanente è supportata in molti browser moderni.

Supporto dei browser

  • 55
  • 79
  • 57
  • 15.2

Fonte

Per scoprire di più sull'eliminazione, sulla quantità di archiviazione che puoi 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 utilizzare 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 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}`);
}

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 dovrebbe idealmente essere aggregata in un gesto utente. Non richiedere l'archiviazione permanente al caricamento della pagina o in altro codice di bootstrap, il browser potrebbe richiedere l'autorizzazione all'utente. Se l'utente non sta facendo nulla di ciò che ritiene da salvare, la richiesta potrebbe essere confuso e probabilmente rifiuterà. Inoltre, non mostrare richieste troppo frequenti. Se l'utente ha deciso di non concedere l'autorizzazione, non mostrare subito di nuovo la richiesta al successivo salvataggio.

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, a indicare se è stata concessa l'autorizzazione di 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 viene considerata come un'autorizzazione. I browser usano diversi fattori per decidere se concedere autorizzazioni di 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 invece un sito viene considerato importante, l'autorizzazione per l'archiviazione permanente viene concessa automaticamente, altrimenti viene negata automaticamente.

L'euristica per determinare se un sito è importante include:

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

Se la richiesta è stata rifiutata, può 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, viene richiesto all'utente una finestra popup dell'interfaccia utente che chiede se consente al sito di archiviare i dati nell'archiviazione permanente.

Un popup mostrato da Firefox quando un sito richiede l'archiviazione permanente.
Un 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
  • App Cache (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 dimostra che, sebbene sia possibile, raramente i dati archiviati vengono cancellati automaticamente da Chrome. Per proteggere i 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 tuoi dati non vengano rimossi dal browser quando il dispositivo locale deve affrontare una pressione di archiviazione. Ricorda di richiedere l'archiviazione permanente solo quando è più probabile che l'utente lo voglia.

Grazie per aver deciso

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

Immagine hero di Umberto su Unsplash