Archiviazione persistente

L'archiviazione permanente può contribuire a proteggere i dati critici dall'eliminazione e a ridurre la probabilità di perdita di dati.

In caso di problemi di spazio di archiviazione, ad esempio spazio su disco insufficiente, i browser in genere eliminano i dati, inclusi quelli dell'API Cache e di 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 suo funzionamento, con conseguenti esperienze utente negative.

Fortunatamente, le ricerche del team di Chrome mostrano che i dati vengono cancellati automaticamente da Chrome molto raramente. È molto più comune che gli utenti cancellino manualmente lo spazio di archiviazione. Pertanto, se un utente visita regolarmente il tuo sito, è improbabile 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 venga contrassegnato come permanente.

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

Browser Support

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

Source

Per scoprire di più sull'eliminazione, sulla quantità di dati che puoi archiviare e su come gestire le limitazioni della quota , consulta la pagina 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 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 lo spazio di archiviazione permanente?

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

Richiedere lo spazio di archiviazione permanente

Per richiedere lo spazio di archiviazione permanente per i dati del tuo sito, chiama navigator.storage.persist(). Restituisce una promessa che viene risolta con un valore booleano, che indica se l'autorizzazione per lo spazio 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?

Lo spazio di archiviazione permanente viene trattato come un'autorizzazione. I browser utilizzano fattori diversi per decidere se concedere le autorizzazioni per lo spazio 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 un sito è considerato importante, l'autorizzazione per lo spazio di archiviazione permanente viene concessa automaticamente, altrimenti viene negata senza che l'utente se ne accorga.

Le euristiche per determinare se un sito è importante includono:

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

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

Firefox

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

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

Quale spazio di archiviazione è protetto dallo spazio di archiviazione permanente?

Se viene concessa l'autorizzazione per lo spazio di archiviazione permanente, il browser non eliminerà i dati archiviati in:

  • API Cache
  • Cookie
  • Spazio di archiviazione DOM (spazio di archiviazione locale)
  • API File System (file system fornito dal browser e in sandbox)
  • IndexedDB
  • Service worker
  • Cache app (ritirata, non utilizzarla)
  • WebSQL (ritirata, non utilizzarla)

Come disattivare lo spazio di archiviazione permanente

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

Conclusione

Le ricerche del team di Chrome mostrano che, sebbene sia possibile, i dati archiviati vengono cancellati automaticamente da Chrome molto raramente. Per proteggere i dati critici che potrebbero non essere archiviati nel cloud o che comporteranno una perdita di dati significativa, lo spazio di archiviazione permanente può essere uno strumento utile per garantire che i dati non vengano rimossi dal browser quando il dispositivo locale è sottoposto a problemi di spazio di archiviazione. Ricorda che devi richiedere lo spazio di archiviazione permanente solo quando è più probabile che l'utente lo voglia.

Grazie

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