De Storage Standard definieert een API voor persistente opslag- en quotaschattingen, en de platformopslagarchitectuur. We lanceren een API om aanhoudende verwijdering van opslag onder zware geheugendruk voorspelbaarder te maken. Het is beschikbaar vanaf chroom 122.
Welk probleem lost de opslagstandaard op?
Traditioneel, als de gebruiker geen opslagruimte meer heeft op zijn apparaat, gaan de gegevens die zijn opgeslagen met API's zoals IndexedDB of localStorage
verloren zonder dat de gebruiker kan ingrijpen. Een manier om opslag persistent te maken is door de persist()
-methode van de StorageManager
interface aan te roepen. Het vraagt tegelijkertijd de eindgebruiker om toestemming en verandert de opslag zodat deze persistent is 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 opslag te behouden is alles of niets. Er is geen manier om meer fijnmazige volhardingsbehoeften tot uitdrukking te brengen. Het is allemaal één opslagemmer.
De Storage Buckets-API
Het kernidee van de Storage Buckets API is dat sites meerdere opslagbuckets kunnen maken, waarbij de browser ervoor kan kiezen om elke bucket onafhankelijk van andere buckets te verwijderen. Hierdoor kunnen ontwikkelaars prioriteiten voor uitzettingen specificeren om ervoor te zorgen dat de meest waardevolle gegevens niet worden verwijderd.
Gebruiksvoorbeeld
Om te illustreren waar opslagemmers van pas zouden kunnen komen, kunt u zich een e-mailtoepassing voorstellen. Het zou onvergeeflijk zijn als de app de niet-verzonden concepten van de gebruiker zou verliezen, die alleen op de client bestaan. Als ze daarentegen op een server zijn opgeslagen, zou de gebruiker er waarschijnlijk geen problemen mee hebben als sommige van zijn oudste e-mails in de inbox van de client worden verwijderd als zijn browser onder zware opslagdruk staat.
Gebruik de Storage Buckets-API
Maak een nieuwe opslagbucket
Er kan een nieuwe opslagbucket worden gemaakt met de methode open()
op de StorageBucketManager
interface.
// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');
Maak een blijvende nieuwe opslagbucket
Om ervoor te zorgen dat de opslagbucket blijft bestaan, kunt u durability
en persisted
optieargumenten doorgeven aan de open()
-methode:
-
persisted
bepaalt of de opslagbucket moet worden gehandhaafd of niet. De toegestane waarden zijnfalse
(standaard) oftrue
. durability
geeft de browser een hint waarmee hij schrijfprestaties kan afwegen tegen een verminderd risico op gegevensverlies bij stroomstoringen. De toegestane waarden zijn'relaxed'
(standaard) of'strict'
:-
'strict'
buckets proberen het risico op gegevensverlies bij stroomuitval te minimaliseren. Dit kan ten koste gaan van verminderde prestaties, wat betekent dat het schrijven langer kan duren om te voltooien, de algehele systeemprestaties kan beïnvloeden, meer batterijvermogen kan verbruiken en het opslagapparaat sneller kan verslijten. -
'relaxed'
buckets kunnen schrijfbewerkingen die in de afgelopen paar seconden zijn voltooid, 'vergeten' wanneer er een stroomstoring optreedt. In ruil daarvoor kan het schrijven van gegevens naar deze buckets betere prestatiekenmerken hebben, waardoor de batterij langer meegaat en kan resulteren in een langere levensduur van het opslagapparaat. Ook zal een stroomstoring niet in een hoger tempo tot datacorruptie leiden 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 tot de opslag-API's vanuit een opslagbucket
Elke opslagbucket is gekoppeld aan opslag-API's, bijvoorbeeld IndexedDB , de cache- interface of de bestandsinterface . Deze opslag-API's werken zoals gebruikelijk, alleen dat het toegangspunt afkomstig is van 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);
});
Foutopsporing in opslagbuckets in DevTools
Inspecteer opslagbuckets in een speciale structuur in de sectie Toepassing > Opslag .