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.
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 sonofalse
(predefinito) otrue
.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.