Presentazione dei bucket di archiviazione: non tutto lo spazio di archiviazione è uguale

Storage Standard definisce un'API per l'archiviazione permanente e le stime di quota di spazio di archiviazione e l'architettura di archiviazione della piattaforma. Stiamo lanciando un'API per eseguire l'eliminazione dello spazio di archiviazione permanente in ambienti la pressione della memoria è più prevedibile. È disponibile a partire da Chromium 122.

Quale problema risolve lo standard di archiviazione?

Tradizionalmente, quando l'utente esaurisce lo spazio di archiviazione sul dispositivo, i dati archiviati con API come IndexedDB o localStorage vengono persi senza che l'utente possa intervenire. Un modo per rendere di archiviazione permanente consiste nel richiamare persist() del metodo StorageManager. Richiedono contemporaneamente l'autorizzazione all'utente finale e permanente lo spazio di archiviazione una volta concesso:

const persisted = await navigator.storage.persist();
if (persisted) {
  /* Storage will not be cleared except by explicit user action. */
}

Questo metodo per richiedere la persistenza dello spazio di archiviazione può essere impostato su "tutto o niente". Non c'è modo di esprimersi di più di una persistenza granulare. È tutto un unico bucket di archiviazione.

API Storage Buckets

L'idea alla base dell'API Storage Buckets è concedendo ai siti la possibilità di creare più bucket di archiviazione, dove il browser può scegliere di di eliminare ogni bucket indipendentemente dagli altri. In questo modo gli sviluppatori possono specificare per evitare che i dati più preziosi vengano eliminati.

Esempio di caso d'uso

Per illustrare l'utilità dei bucket di archiviazione, immagina un'applicazione email. Sarebbe è impossibile se l'app ha perso le bozze non inviate dell'utente che esistono solo sul client. Al contrario, se sono archiviati su un server, probabilmente l'utente sta bene con alcune delle email più vecchie della posta in arrivo vengano rimossi dal client se il browser è sottoposto a un’elevata pressione di archiviazione.

Interfaccia dell'app email
App email con bucket di archiviazione separati per posta in arrivo e bozze. (solo a scopo illustrativo, non rispecchia necessariamente il funzionamento di Gmail).

Utilizzare l'API Storage Buckets

Crea un nuovo bucket di archiviazione

È possibile creare un nuovo bucket di archiviazione con il metodo open() nella StorageBucketManager a riga di comando.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

Crea un nuovo bucket di archiviazione permanente

Per assicurarti che il bucket di archiviazione sia persistente, puoi passare l'opzione durability e persisted argomenti al metodo open():

  • persisted determina se il bucket di archiviazione deve essere mantenuto o meno. I valori consentiti sono false (valore predefinito) o true.
  • durability fornisce un suggerimento al browser che lo aiuta a confrontare le prestazioni di scrittura con una riduzione del rischio di perdita dei dati in caso di interruzioni di corrente; I valori consentiti sono 'relaxed' (valore predefinito) o 'strict':

    • 'strict' bucket tentano di ridurre al minimo il rischio di perdita di dati in caso di interruzione dell'alimentazione. Potrebbero arrivare il costo delle prestazioni ridotte, il che significa che le scritture possono richiedere più tempo per il completamento, potrebbe influire le prestazioni complessive del sistema, potrebbero consumare più batteria e usurare il dispositivo di archiviazione più velocemente.
    • 'relaxed' bucket potrebbe "dimenticare" scritture completate negli ultimi secondi, quando dell'alimentazione, In cambio, la scrittura di dati in questi bucket può migliorare le prestazioni caratteristiche e potrebbe consentire alla batteria di durare più a lungo, aumentando così lo spazio di archiviazione per tutta la durata del dispositivo. Inoltre, un'interruzione dell'alimentazione non comporterà il danneggiamento dei dati a una velocità maggiore rispetto a 'strict' bucket.
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
  durability: 'strict', // Or `'relaxed'`.
  persisted: true, // Or `false`.
});

Accedi alle API di archiviazione da un bucket di archiviazione

Ogni bucket di archiviazione è associato ad API di archiviazione, ad esempio IndexedDB, il parametro Cache, o Interfaccia File. Queste API di archiviazione funzionano in base di solito solo che il punto di ingresso proviene dall'interfaccia StorageBucket, ad esempio StorageBucket.indexedDB.

const inboxDb = await new Promise(resolve => {
  const request = inboxBucket.indexedDB.open('messages');
  request.onupgradeneeded = () => { /* migration code */ };
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});

Esegui il debug dei bucket di archiviazione in DevTools

Esamina i bucket di archiviazione in una struttura ad albero dedicata in Applicazione > Spazio di archiviazione.

Prima e dopo l'abilitazione dell'albero dei bucket di archiviazione nella sezione Archiviazione.

Risorse utili