Modification du mode de durabilité par défaut dans IndexedDB

Le mode de durabilité par défaut dans IndexedDB passe de strict à relaxed au lieu de Chrome 121. Cet ajustement vise à améliorer les performances et à s'aligner sur les autres principaux navigateurs comme Firefox et Safari. Cet article de blog explique en détail ce changement et ce qu'il implique pour les développeurs Web.

Modes de durabilité IndexedDB

IndexedDB, une API Web puissante permettant de stocker de grandes quantités de données structurées, propose deux modes de durabilité pour les transactions readwrite:

  • strict:ce mode indique explicitement au système d'exploitation de supprimer les modifications apportées au disque avant d'émettre l'événement complete.
  • relaxed ce mode repose sur le comportement par défaut de vidage de l'OS et génère l'événement complete une fois que des modifications sont apportées au tampon de l'OS, qui est généralement vidé toutes les deux secondes.

Il est important de noter que strict ne garantit pas que les modifications sont réellement écrites immédiatement sur le disque. Lorsqu'un site appelle put(), il s'agit encore d'une durée limitée pendant laquelle une coupure de courant peut empêcher la modification d'être répercutée sur le disque et donc absente lors de la prochaine exécution de l'application.

En ce qui concerne les garanties de durabilité de strict, l'événement complete de la transaction IndexedDB n'est déclenché qu'après l'écriture des données, tandis qu'avec la durabilité relaxed, les données sont toujours en processus d'écriture lorsque l'événement complete se déclenche. (Pour en savoir plus sur la procédure complète, consultez ce document.)

Ainsi, strict n'est destiné qu'aux opérations pour lesquelles vous devez absolument savoir qu'il a été écrit avant de passer à l'action suivante. La migration de données est un exemple dans lequel la durabilité de strict est requise. Lorsque vous passez d'un magasin de stockage à un autre, vous ne devez pas supprimer l'ancien format tant que le nouveau n'a pas été créé. Ainsi, la durabilité de strict facilite la création d'une routine de migration qui pourrait se remettre d'une défaillance en cours de route.

Le changement de mode de durabilité par défaut

L'aspect crucial de ce changement est le mode de durabilité par défaut pour les transactions readwrite dans Chrome. Jusqu'à présent, la valeur par défaut était strict, ce qui permettait d'écrire immédiatement sur le disque les modifications de données. Toutefois, pour des raisons de performances et pour s'aligner sur les autres principaux navigateurs qui utilisent tous relaxed, Chrome prévoit également de remplacer la valeur par défaut par relaxed.

Cette modification vise à offrir un meilleur équilibre entre performances et durabilité des données. Si strict garantit une durabilité des données maximale, relaxed est souvent suffisant pour de nombreuses applications Web et peut améliorer considérablement les performances, comme suit :

  • La rapidité : dans des exemples concrets, l'équipe Chrome a constaté une amélioration de la vitesse entre un facteur de 3 et 30.
  • Durabilité du disque, en particulier pour les appareils équipés d'un disque SSD.
  • Autonomie de batterie prolongée.
  • Une amélioration de la vitesse de lecture. En raison de l'architecture d'IndexedDB, où les transactions de lecture sont souvent bloquées derrière les transactions d'écriture, la vitesse de lecture a été améliorée en tant qu'effet secondaire.
  • L'ensemble de l'appareil est affecté, car les opérations sur le disque sont une ressource système partagée.

Interopérabilité et compatibilité

L'un des aspects importants de ce changement est son impact sur l'interopérabilité et la compatibilité. En s'alignant sur le comportement d'autres grands fournisseurs de navigateurs, Chromium améliore l'interopérabilité. La norme elle-même permet des implémentations différentes, et ce changement vise à harmoniser ces implémentations. Pour en savoir plus sur l'historique de cette modification, consultez ce problème GitHub.

Quel impact pour les développeurs Web ?

Cette modification n'introduit aucune nouvelle surface d'API. L'API IndexedDB existante reste inchangée et cette modification affecte principalement le comportement par défaut des transactions readwrite. Vous pouvez spécifier votre mode de durabilité préféré lorsque vous créez des transactions, ce qui vous permet de contrôler la durabilité et les performances des données. L'exemple de code suivant montre comment récupérer l'ancien comportement en définissant durability sur strict dans le tableau d'options facultatif.

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

Tester la modification localement avant son expédition

Ce changement entrera en vigueur dans Chrome 121. Si vous souhaitez tester le nouveau comportement localement avant, activez l'option #indexed-db-default-durability-relaxed dans chrome://flags.

En savoir plus

Pour plus d'informations techniques et d'informations sur cette modification, consultez la page sur le suivi du bug et l'entrée "État de la plate-forme Chrome".

En résumé, la modification du mode de durabilité par défaut dans IndexedDB par Chrome vise à améliorer les performances tout en maintenant la compatibilité avec les autres principaux navigateurs. Nous vous recommandons de ne rien faire dans la plupart des cas, car la nouvelle valeur par défaut permet d'améliorer les performances. Si nécessaire, vous pouvez continuer à spécifier le mode de durabilité que vous préférez et contrôler ainsi la durabilité et les performances des données dans vos applications Web.

Remerciements

Cet article a été lu par Evan Stade et Rachel Andrew.