De standaardduurzaamheidsmodus in IndexedDB verandert van strict
naar relaxed
vanaf Chrome 121. Deze aanpassing is bedoeld om de prestaties te verbeteren en aan te sluiten bij andere belangrijke browsers zoals Firefox en Safari. In de blogpost worden de details van deze wijziging en de gevolgen voor webontwikkelaars uitgelegd.
IndexedDB-duurzaamheidsmodi
IndexedDB , een krachtige web-API voor het opslaan van grote hoeveelheden gestructureerde data, biedt twee duurzaamheidsmodi voor readwrite
schrijftransacties:
-
strict
: deze modus geeft het besturingssysteem expliciet de opdracht om wijzigingen naar de schijf te wissen voordat decomplete
gebeurtenis wordt uitgegeven. - In deze modus wordt
relaxed
van het standaard flushgedrag van het besturingssysteem. Decomplete
gebeurtenis wordt gegenereerd nadat er wijzigingen in de buffer van het besturingssysteem zijn doorgevoerd. Deze buffer wordt doorgaans elke paar seconden geleegd.
Het is belangrijk om te weten dat strict
niet garandeert dat wijzigingen daadwerkelijk direct naar schijf worden geschreven. Nadat een site put()
heeft aangeroepen, is er nog een beperkte tijd waarin een stroomstoring ervoor kan zorgen dat de wijziging niet op schijf terechtkomt en dus de volgende keer dat de app wordt uitgevoerd, verloren gaat.
Bij garanties met strict
duurzaamheid wordt de gebeurtenis 'IndexedDB Transaction complete
pas geactiveerd nadat de gegevens daadwerkelijk zijn weggeschreven. Bij garanties met relaxed
duurzaamheid zijn de gegevens nog in het schrijfproces op het moment dat de gebeurtenis ' complete
wordt geactiveerd. (Voor meer informatie over het volledige proces, zie deze uitleg ).
strict
is eigenlijk alleen van toepassing op bewerkingen waarbij u absoluut zeker moet weten dat het is geschreven voordat u de volgende stap uitvoert. Datamigratie is een voorbeeld waarbij strict
duurzaamheid vereist is. Bij het overstappen van de ene back-up naar de andere wilt u het oude formaat niet verwijderen totdat het nieuwe is geschreven. strict
duurzaamheid maakt op deze manier een migratieroutine mogelijk die halverwege een storing kan herstellen.
De standaard duurzaamheidsmodus wijzigen
Het cruciale aspect van deze wijziging is de standaardduurzaamheidsmodus voor readwrite
schrijftransacties in Chrome. Tot nu toe was de standaardinstelling strict
, waarmee onmiddellijke schrijfbewerkingen naar de schijf werden gegarandeerd bij gegevenswijzigingen. Vanwege prestatieoverwegingen en om aan te sluiten bij andere grote browsers die allemaal relaxed
gebruiken, is Chrome echter van plan de standaardinstelling te wijzigen naar relaxed
.
Deze wijziging is bedoeld om een betere balans te bieden tussen prestaties en dataduurzaamheid. strict
zorgt voor maximale dataduurzaamheid, maar relaxed
is vaak voldoende voor veel webapplicaties en kan de prestaties aanzienlijk verbeteren op de volgende manieren.
- Snelheid: in praktijkvoorbeelden zag het Chrome-team snelheidsverbeteringen tussen een factor 3 en 30.
- Duurzaamheid van schijven, met name voor apparaten met een Solid State Disk (SSD).
- Langere batterijduur.
- Verbetering van de leessnelheid. Dankzij de architectuur van IndexedDB, waarbij leestransacties vaak achter schrijftransacties worden geblokkeerd, is de leessnelheid als secundair effect verbeterd.
- Het hele apparaat ondervindt een positief effect, omdat schijfbewerkingen een gedeelde systeembron zijn.
Interoperabiliteit en compatibiliteit
Een belangrijk aspect van deze wijziging is de impact op interoperabiliteit en compatibiliteit. Door zich aan te passen aan het gedrag van andere grote browserleveranciers, verbetert Chromium de interoperabiliteit. De standaard zelf staat verschillende implementaties toe, en deze wijziging beoogt die implementaties te harmoniseren. Meer historische context over deze wijziging vindt u in deze GitHub Issue .
Wat betekent dit voor webontwikkelaars?
Deze wijziging introduceert geen nieuw API-oppervlak. De bestaande IndexedDB API blijft ongewijzigd en deze wijziging heeft voornamelijk invloed op het standaardgedrag van readwrite
transacties. U kunt uw voorkeursmodus voor duurzaamheid opgeven bij het aanmaken van transacties, zodat u controle hebt over de duurzaamheid en prestaties van de gegevens. Het volgende codevoorbeeld laat zien hoe u het oude gedrag kunt terugkrijgen 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 eerst lokaal wilt testen, schakelt u de vlag #indexed-db-default-durability-relaxed
in chrome://flags
.
Meer informatie
Voor meer technische details en updates over deze wijziging kunt u de trackingbug en de vermelding Chrome Platform Status raadplegen.
Kortom, Chrome's wijziging van de standaardduurzaamheidsmodus in IndexedDB is bedoeld om de prestaties te verbeteren en tegelijkertijd de compatibiliteit met andere belangrijke browsers te behouden. In de meeste gevallen raden we aan om niets te doen, aangezien de nieuwe standaardinstelling voor prestatieverbeteringen zorgt. Indien nodig kunt u uw voorkeursduurzaamheidsmodus blijven specificeren en zo de controle houden over de duurzaamheid en prestaties van uw gegevens in uw webapplicaties.
Dankbetuigingen
Dit artikel is beoordeeld door Evan Stade en Rachel Andrew .