De Storage Standard definieert een API voor persistente opslag en quota-schattingen, en de opslagarchitectuur van het platform. We lanceren een API om het verwijderen van persistente opslag onder zware geheugenbelasting voorspelbaarder te maken. Deze is beschikbaar vanaf Chromium 122.
Welk probleem lost de opslagstandaard op?
Normaal gesproken gaan de gegevens die zijn opgeslagen met API's zoals IndexedDB of localStorage
verloren wanneer de gebruiker onvoldoende opslagruimte op zijn apparaat heeft, zonder dat de gebruiker hier iets aan kan doen. Een manier om opslag permanent te maken, is door de persist()
methode van de StorageManager
interface aan te roepen. Deze methode vraagt de eindgebruiker tegelijkertijd om toestemming en wijzigt de opslag naar persistent zodra deze is verleend:
const persisted = await navigator.storage.persist();
if (persisted) {
/* Storage will not be cleared except by explicit user action. */
}
Deze methode om te vragen om persistentie van opslag is alles of niets. Er is geen manier om meer gedetailleerde persistentiebehoeften uit te drukken. Het is allemaal één opslagbucket.
De Storage Buckets API
Het kernidee van de Storage Buckets API is dat sites meerdere storage buckets kunnen aanmaken, waarbij de browser ervoor kan kiezen om elke bucket onafhankelijk van andere buckets te verwijderen. Dit stelt ontwikkelaars in staat om de prioriteit van verwijderingen te specificeren om ervoor te zorgen dat de meest waardevolle gegevens niet worden verwijderd.
Gebruiksvoorbeeld
Om te illustreren waar opslagbuckets van pas zouden komen, stel je een e-mailapplicatie voor. Het zou onvergeeflijk zijn als de app de niet-verzonden concepten van de gebruiker kwijtraakt die alleen op de client aanwezig zijn. Als ze daarentegen op een server worden opgeslagen, zou de gebruiker er waarschijnlijk geen probleem mee hebben dat sommige van zijn oudste e-mails in de inbox van de client worden verwijderd als de browser onder zware opslagdruk staat.

Gebruik de Storage Buckets API
Een nieuwe opslagbucket maken
U kunt een nieuwe opslagbucket maken met de open()
methode op de StorageBucketManager
interface.
// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');
Een nieuwe, permanente opslagbucket maken
Om ervoor te zorgen dat de opslagbucket behouden blijft, kunt u durability
en persisted
optie-argumenten doorgeven aan de open()
methode:
-
persisted
bepaalt of de opslagbucket al dan niet persistent moet zijn. De toegestane waarden zijnfalse
(standaard) oftrue
. durability
geeft de browser een hint waarmee hij schrijfprestaties kan afwegen tegen een verminderd risico op gegevensverlies bij stroomuitval. De toegestane waarden zijn'relaxed'
(standaard) of'strict'
:-
'strict'
buckets proberen het risico op gegevensverlies bij stroomuitval te minimaliseren. Dit kan echter ten koste gaan van de prestaties, wat betekent dat schrijfbewerkingen langer kunnen duren, de algehele systeemprestaties kunnen beïnvloeden, meer batterijvermogen kunnen verbruiken en het opslagapparaat sneller kunnen laten slijten. -
'relaxed'
buckets kunnen schrijfbewerkingen die in de laatste paar seconden zijn voltooid, "vergeten" wanneer er een stroomstoring optreedt. Het schrijven van gegevens naar deze buckets kan daarentegen betere prestatiekenmerken hebben, een langere batterijlading mogelijk maken en resulteren in een langere levensduur van het opslagapparaat. Bovendien leidt stroomuitval niet vaker tot gegevenscorruptie dan bij'strict'
buckets.
-
// 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`.
});
Toegang krijgen tot de opslag-API's vanuit een opslagbucket
Elke opslagbucket is gekoppeld aan opslag-API's, bijvoorbeeld IndexedDB , de Cache- interface of de File- interface. Deze opslag-API's werken zoals gebruikelijk, alleen is het toegangspunt via de StorageBucket
interface, bijvoorbeeld 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);
});
Debug-opslagbuckets in DevTools
Inspecteer opslagbuckets in een speciale boom in de sectie Toepassing > Opslag .