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

Storage Standard definisce un'API per l'archiviazione permanente e le stime delle quote, nonché l'architettura di archiviazione della piattaforma. Stiamo lanciando un'API per rendere più prevedibile l'eliminazione dell'archiviazione permanente in condizioni di memoria elevata. È 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 quali IndexedDB o localStorage vengono persi senza che l'utente possa intervenire. Un modo per rendere permanente l'archiviazione consiste nel richiamare il metodo persist() dell'interfaccia StorageManager. Dopo la concessione, richiede contemporaneamente l'autorizzazione all'utente finale e modifica lo spazio di archiviazione in permanente:

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 esprimere esigenze di persistenza più granulari. È tutto un unico bucket di archiviazione.

API Storage Buckets

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

Esempio di caso d'uso

Per illustrare l'utilità dei bucket di archiviazione, immagina un'applicazione email. Sarebbe imperdonabile se l'app perdesse le bozze non inviate dell'utente che esistono solo sul client. Al contrario, se vengono archiviati su un server, l'utente potrebbe probabilmente rimuovere dal client alcune delle email più vecchie della posta in arrivo nel caso in cui il browser sia 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

Puoi creare un nuovo bucket di archiviazione con il metodo open() nell'interfaccia StorageBucketManager.

// 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 gli argomenti delle opzioni durability e persisted al metodo open():

  • persisted determina se il bucket di archiviazione deve essere mantenuto o meno. I valori consentiti sono false (predefinito) o true.
  • durability fornisce al browser un suggerimento che lo aiuta a confrontare le prestazioni di scrittura con un rischio ridotto di perdita di dati in caso di interruzioni dell'alimentazione. 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. Ciò può peggiorare le prestazioni ridotte, il che significa che il completamento delle scritture potrebbe richiedere più tempo, potrebbe influire sulle prestazioni complessive del sistema, consumare più batteria e consumare più rapidamente il dispositivo di archiviazione.
    • 'relaxed' bucket possono "dimenticare" le scritture completate negli ultimi secondi, quando si verifica una perdita di alimentazione. In cambio, la scrittura di dati in questi bucket può avere caratteristiche prestazionali migliori e può consentire una maggiore durata della carica della batteria, con conseguente maggiore durata del dispositivo di archiviazione. Inoltre, l'interruzione dell'alimentazione non causerà il danneggiamento dei dati a una velocità maggiore rispetto a quella dei bucket 'strict'.
// 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 alle API di archiviazione, ad esempio IndexedDB, l'interfaccia Cache o File. Queste API di archiviazione funzionano come di consueto, solo che il punto di ingresso proviene dall'interfaccia di 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 dedicato nella sezione Applicazione > Archiviazione.

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

Risorse utili