Stockage IndexedDB plus efficace dans Chrome

Une nouvelle optimisation dans Chrome améliore le stockage des données IndexedDB sur le disque. Cette amélioration se concentre sur la manière dont les valeurs volumineuses sont gérées dans le système de stockage de Chrome, en introduisant notamment la compression pour certains fichiers stockés sur disque. L'article résume les points clés de cette mise à jour.

Mécanisme de stockage de Chrome avant la version 129

Chrome utilise LevelDB pour stocker les données IndexedDB sur le disque. LevelDB est une bibliothèque de stockage de clés-valeurs rapide, mais elle rencontre des difficultés lorsque les valeurs individuelles dépassent la taille d'une page de base de données. Pour y remédier, depuis 2017, Chrome stocke les valeurs supérieures à une page sous forme de fichiers simples sur le disque, à côté du fichier de base de données.

Stockage à partir de la version 129

Compression des valeurs élevées

Contrairement aux contenus stockés directement dans la base de données LevelDB, qui sont compressés avant d'être écrits sur le disque et décompressés après avoir été lus, les fichiers volumineux stockés en tant que fichiers simples n'étaient pas compressés. Avec cette nouvelle mise à jour, Chrome compresse désormais ces fichiers volumineux à l'aide de la bibliothèque de compression en temps réel Snappy, ce qui permet de gagner beaucoup d'espace. Cette approche est particulièrement efficace pour les données structurées, telles que de grands tableaux de valeurs JavaScript, XML ou JSON. Elle n'est pas efficace pour les fichiers multimédias volumineux, mais déjà compressés, ou, moins souvent, si le site effectue déjà son propre compression et décompression.

Impact sur l'efficacité du stockage

Si la compression réduit la taille du fichier en dessous de celle d'une page LevelDB, les données sont de nouveau déplacées vers LevelDB. Cette modification permet non seulement d'économiser de l'espace, mais aussi de réduire les opérations d'E/S disque, ce qui améliore les performances globales.

Algorithme de compression Snappy

L'équipe Chrome a choisi Snappy pour la compression, car il optimise la vitesse plutôt que la compression maximale. Il est suffisamment rapide pour ne pas entraîner de perte de performances mesurable lors de la compression ou de la décompression.

Amélioration des performances

La compression et la décompression sont gérées dans le processus de rendu, qui fait partie de l'architecture multiprocessus de Chrome. Cela réduit la taille des messages envoyés au processus du navigateur, ce qui améliore encore les performances. Des benchmarks synthétiques ont montré que cette mise à jour peut rendre certaines opérations deux à trois fois plus rapides qu'auparavant en raison de la réduction de l'IPC (communication inter-processus) et des E/S disque. En pratique, d'après les mesures de l'équipe Chrome, les charges utiles de données structurées de 1 Mo sont transmises du disque à la page en environ un quart du temps (avec une variabilité élevée en fonction du matériel de l'appareil et de l'activité du système).

Impact sur les développeurs et les utilisateurs

Ces modifications sont entièrement transparentes pour les développeurs et les utilisateurs. Toutefois, les utilisateurs peuvent constater une amélioration des performances et une réduction de l'utilisation de l'espace de stockage.

  • Économie d'espace:la compression ne s'applique qu'aux nouvelles données stockées après cette mise à jour. Vous pouvez observer indirectement l'espace économisé à l'aide d'API Web telles que navigator.storage.estimate() ou dans la section Storage (Stockage) des outils pour les développeurs Chrome, sous le panneau Application.
  • Tester la fonctionnalité:les développeurs peuvent tester ce comportement dans les versions préliminaires de Chrome (version 129 et antérieures) en activant la fonctionnalité avec l'indicateur: --enable-features="IndexedDBCompressValuesWithSnappy".

Cette mise à jour améliore l'efficacité de Chrome dans la gestion des grandes valeurs IndexedDB, ce qui permet de gagner de l'espace et du temps sans compromettre les performances. Elle marque une amélioration significative de la façon dont les données sont stockées et consultées dans le navigateur. En comprenant ces changements, les développeurs peuvent profiter des efforts continus visant à optimiser les performances et les mécanismes de stockage de Chrome, ce qui garantit une expérience utilisateur plus fluide et plus efficace.

Remerciements

Ce document a été examiné par Evan Stade et Rachel Andrew.