Een wijziging in de standaardduurzaamheidsmodus in IndexedDB

De standaardduurzaamheidsmodus in IndexedDB verandert van Chrome 121 van strict naar relaxed Deze aanpassing is bedoeld om de prestaties te verbeteren en af ​​te stemmen op andere grote browsers zoals Firefox en Safari. In de blogpost worden de details van deze wijziging uitgelegd en wat dit betekent voor webontwikkelaars.

IndexedDB-duurzaamheidsmodi

IndexedDB , een krachtige web-API voor het opslaan van grote hoeveelheden gestructureerde gegevens, biedt twee duurzaamheidsmodi voor readwrite schrijftransacties:

  • strict : deze modus instrueert het besturingssysteem expliciet om wijzigingen naar de schijf te wissen voordat de complete gebeurtenis wordt uitgevoerd.
  • relaxed Deze modus is afhankelijk van het standaard spoelgedrag van het besturingssysteem en geeft de complete gebeurtenis af nadat wijzigingen de buffer van het besturingssysteem hebben bereikt, die doorgaans om de paar seconden wordt leeggemaakt.

Het is belangrijk op te merken dat strict niet garandeert dat wijzigingen daadwerkelijk onmiddellijk naar schijf worden geschreven. Nadat een site put() heeft aangeroepen, is er nog steeds een beperkte hoeveelheid tijd waarin een stroomstoring ervoor kan zorgen dat de wijziging niet op de schijf terechtkomt en daardoor de volgende keer dat de app wordt uitgevoerd, ontbreekt.

Als het gaat om garanties met strict duurzaamheid, wordt de IndexedDB-transactie complete gebeurtenis pas geactiveerd nadat de gegevens daadwerkelijk zijn geschreven, terwijl bij relaxed duurzaamheid de gegevens nog steeds worden geschreven wanneer de complete gebeurtenis wordt geactiveerd. ( Raadpleeg deze uitleg voor meer informatie over het volledige proces).

Zo strict is eigenlijk alleen voor handelingen waarbij je absoluut moet weten dat het is geschreven voordat je het volgende doet. Datamigratie is een voorbeeld waarbij strict duurzaamheid vereist is. Wanneer u van de ene back-up naar de andere gaat, wilt u het oude formaat niet verwijderen voordat het nieuwe is geschreven. Op deze manier maakt strict duurzaamheid een migratieroutine mogelijk die zich halverwege kan herstellen van een storing.

De standaardduurzaamheidsmodus verandert

Het cruciale aspect van deze wijziging is de standaard duurzaamheidsmodus voor readwrite schrijftransacties in Chrome. Tot nu toe was de standaard strict , waardoor onmiddellijk schrijven naar de schijf bij gegevenswijzigingen werd gegarandeerd. Vanwege prestatieoverwegingen en om aan te sluiten bij andere grote browsers die allemaal relaxed gebruiken, is Chrome eveneens van plan de standaard te wijzigen in relaxed .

Deze wijziging is bedoeld om een ​​beter evenwicht te bieden tussen prestaties en gegevensduurzaamheid. Hoewel strict maximale duurzaamheid van gegevens garandeert, is relaxed vaak voldoende voor veel webapplicaties en kan het de prestaties op de volgende manieren aanzienlijk verbeteren

  • Snelheid: in praktijkvoorbeelden zag het Chrome-team snelheidsverbeteringen tussen een factor 3 en 30.
  • Schijfduurzaamheid, vooral voor apparaten met een Solid State Disk (SSD).
  • Verlengde levensduur van de batterij.
  • Een verbetering van de leessnelheid. Vanwege de architectuur van IndexedDB, waarbij leestransacties vaak achter schrijftransacties worden geblokkeerd, wordt de leessnelheid als secundair effect verbeterd.
  • Het hele apparaat wordt positief beïnvloed, omdat schijfbewerkingen een gedeelde systeembron zijn.

Interoperabiliteit en compatibiliteit

Een belangrijk aspect van deze verandering is de impact ervan op de interoperabiliteit en compatibiliteit. Door zich aan te passen aan het gedrag van andere grote browserleveranciers verbetert Chromium de interoperabiliteit. De standaard zelf maakt verschillende implementaties mogelijk, en deze wijziging heeft tot doel deze implementaties te harmoniseren. Je kunt meer historische context over deze verandering vinden in deze GitHub Issue .

Wat betekent dit voor webontwikkelaars?

Deze wijziging introduceert geen nieuw API-oppervlak. De bestaande IndexedDB API blijft hetzelfde en deze wijziging heeft vooral invloed op het standaardgedrag van readwrite . U kunt de duurzaamheidsmodus van uw voorkeur opgeven bij het maken van transacties, waardoor u controle krijgt over de duurzaamheid en prestaties van gegevens. In het volgende codevoorbeeld ziet u hoe u het oude gedrag terugkrijgt door durability in te stellen op strict in de array met optionele opties.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

De wijziging lokaal testen voordat deze wordt verzonden

De wijziging wordt van kracht in Chrome 121. Als u het nieuwe gedrag eerder lokaal wilt testen, schakelt u de vlag #indexed-db-default-durability-relaxed in chrome://flags in.

Kom meer te weten

Voor meer technische details en updates over deze wijziging raadpleegt u de trackingbug en het item Chrome Platform Status .

Samenvattend is het doel van Chrome om de standaard duurzaamheidsmodus in IndexedDB te wijzigen bedoeld om de prestaties te verbeteren en tegelijkertijd de compatibiliteit met andere grote browsers te behouden. In de meeste gevallen is onze aanbeveling om niets te doen, omdat de nieuwe standaard prestatieverbeteringen zal opleveren. Indien nodig kunt u de duurzaamheidsmodus van uw voorkeur blijven opgeven, zodat u de controle krijgt over de duurzaamheid en prestaties van gegevens in uw webapplicaties.

Dankbetuigingen

Dit artikel is beoordeeld door Evan Stade en Rachel Andrew .