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