Niet alle opslag is gelijk: de introductie van Storage Buckets

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.

E-mailapp-interface
E-mailapp met aparte opslagbuckets voor inbox en concepten. (Alleen ter illustratie: dit geeft niet noodzakelijkerwijs weer hoe Gmail werkt.)

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 zijn false (standaard) of true .
  • durability geeft de browser een hint waarmee hij schrijfprestaties kan afwegen tegen een verminderd risico op gegevensverlies in het geval van 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 gewoonlijk, 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);
});

Nuttige bronnen