Efficiëntere IndexedDB-opslag in Chrome

Een nieuwe optimalisatie in Chrome verbetert de manier waarop IndexedDB-gegevens op schijf worden opgeslagen. Deze verbetering richt zich op de manier waarop grote waarden worden beheerd binnen het opslagsysteem van Chrome, met name door compressie toe te passen op bepaalde bestanden die op schijf zijn opgeslagen. Het artikel vat de belangrijkste punten van deze update samen.

Het opslagmechanisme van Chrome vóór versie 129

Chrome gebruikt LevelDB om IndexedDB-gegevens op schijf op te slaan. LevelDB is een snelle opslagbibliotheek voor sleutelwaarden, maar heeft moeite wanneer individuele waarden de grootte van een databasepagina overschrijden. Om dit aan te pakken heeft Chrome sinds 2017 waarden groter dan één pagina opgeslagen als gewone bestanden op de schijf naast het databasebestand.

Opslag vanaf versie 129

Compressie van grote waarden

In tegenstelling tot de inhoud die rechtstreeks in de LevelDB-database is opgeslagen, die wordt gecomprimeerd voordat deze naar schijf wordt geschreven en wordt gedecomprimeerd nadat deze is gelezen, zijn de grote bestanden die als gewone bestanden zijn opgeslagen, niet gecomprimeerd. Met de nieuwe update comprimeert Chrome deze grote bestanden nu met behulp van de Snappy real-time compressiebibliotheek, wat een aanzienlijke ruimtebesparing oplevert. Dit is vooral effectief voor gestructureerde gegevens, zoals grote arrays met JavaScript-waarden, XML of JSON. Het is niet effectief voor mediabestanden die groot zijn, maar al gecomprimeerd zijn, of, minder gebruikelijk, als de site al zijn eigen zip- en unzipping uitvoert.

Impact op de opslagefficiëntie

Als de compressie de bestandsgrootte verkleint tot onder de grootte van een LevelDB-pagina, worden de gegevens terug verplaatst naar LevelDB. Deze wijziging bespaart niet alleen ruimte, maar vermindert ook de schijf-I/O-bewerkingen, waardoor de algehele prestaties worden verbeterd.

Pittig compressie-algoritme

Het Chrome-team koos voor Snappy voor compressie omdat het optimaliseert voor snelheid in plaats van voor maximale compressie. Het is zo snel dat er geen meetbare prestatievermindering optreedt tijdens compressie of decompressie.

Prestatieverbeteringen

De compressie en decompressie worden afgehandeld binnen het rendererproces, onderdeel van de multiprocesarchitectuur van Chrome. Dit verkleint de omvang van de berichten die naar het browserproces worden verzonden, wat leidt tot verdere prestatieverbeteringen. Synthetische benchmarks hebben aangetoond dat deze update sommige bewerkingen twee tot drie keer sneller kan maken dan voorheen, dankzij verminderde IPC (Inter-Process Communication) en schijf-I/O. In de praktijk worden volgens de metingen van het Chrome-team in ongeveer een kwart van de tijd 1 MB gestructureerde datapayloads van schijf naar pagina afgeleverd (met grote variabiliteit op basis van apparaathardware en systeemactiviteit).

Impact van ontwikkelaars en gebruikers

Deze wijzigingen zijn volledig transparant voor zowel ontwikkelaars als gebruikers. Gebruikers kunnen echter verbeteringen in de prestaties en een vermindering van het opslaggebruik opmerken.

  • Ruimtebesparing: de compressie wordt alleen toegepast op nieuwe gegevens die na deze update zijn opgeslagen. De ruimtebesparing kan indirect worden waargenomen met behulp van web-API's zoals navigator.storage.estimate() of in het gedeelte Opslag in Chrome DevTools onder het paneel Applicaties .
  • De functie testen: Ontwikkelaars kunnen dit gedrag testen in pre-releaseversies van Chrome (vóór 129) door de functie in te schakelen met de vlag: --enable-features="IndexedDBCompressValuesWithSnappy" .

Deze update verbetert de efficiëntie van Chrome bij het beheren van grote IndexedDB-waarden en biedt zowel ruimte- als tijdbesparingen zonder dat dit ten koste gaat van de prestaties. Dit betekent een aanzienlijke verbetering in de manier waarop gegevens worden opgeslagen en geopend in de browser. Door deze veranderingen te begrijpen, kunnen ontwikkelaars profiteren van de voortdurende inspanningen om de prestaties en opslagmechanismen van Chrome te optimaliseren, waardoor een soepelere en efficiëntere gebruikerservaring wordt gegarandeerd.

Dankbetuigingen

Dit document is beoordeeld door Evan Stade en Rachel Andrew .