À partir de Chrome 121, le mode de durabilité par défaut dans IndexedDB passe de strict
à relaxed
. 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 à l'OS d'effacer les modifications sur le disque avant d'émettre l'événementcomplete
.relaxed
: ce mode s'appuie sur le comportement de vidage par défaut de l'OS et génère l'événementcomplete
une fois que les modifications ont été 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 effectivement écrites immédiatement sur le disque. Une fois qu'un site appelle put()
, il reste un temps limité pendant lequel une panne de courant peut empêcher le changement d'être enregistré sur le disque et donc de ne pas être disponible lors de l'exécution suivante de l'application.
En ce qui concerne les garanties avec la durabilité 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 encore en cours d'écriture lorsque l'événement complete
se déclenche. (Pour en savoir plus sur l'ensemble du processus, consultez cette vidéo explicative.)
strict
n'est donc réservé qu'aux opérations pour lesquelles vous devez absolument savoir qu'elles ont été écrites avant de passer à l'étape suivante. La migration de données est un exemple de cas où la durabilité strict
est requise. Lorsque vous passez d'un espace de stockage en arrière-plan à un autre, vous ne devez pas supprimer l'ancien format tant que le nouveau n'a pas été écrit. De cette manière, la durabilité strict
facilite une routine de migration qui peut récupérer en cas de défaillance à mi-chemin.
Modification du 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 garantissait des écritures sur disque immédiates pour 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 définir relaxed
comme valeur par défaut.
Cette modification vise à offrir un meilleur équilibre entre les performances et la durabilité des données. Bien que strict
assure une durabilité maximale des données, relaxed
est souvent suffisant pour de nombreuses applications Web et peut améliorer considérablement les performances de la manière suivante :
- Vitesse : dans des exemples concrets, l'équipe Chrome a constaté une amélioration de la vitesse de 3 à 30 fois.
- Durabilité du disque, en particulier pour les appareils équipés d'un disque SSD (Solid State Drive).
- Autonomie prolongée de la batterie.
- 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 est améliorée en tant qu'effet secondaire.
- L'ensemble de l'appareil est affecté positivement, car les opérations de disque sont une ressource système partagée.
Interopérabilité et compatibilité
Un aspect important de ce changement est son impact sur l'interopérabilité et la compatibilité. En s'alignant sur le comportement des autres grands fournisseurs de navigateurs, Chromium améliore l'interopérabilité. La norme elle-même permet différentes implémentations, et cette modification vise à les harmoniser. Pour en savoir plus sur l'historique de cette modification, consultez ce problème GitHub.
Qu'est-ce que cela signifie pour les développeurs Web ?
Cette modification n'introduit aucune nouvelle surface d'API. L'API IndexedDB existante reste inchangée. Ce changement affecte principalement le comportement par défaut des transactions readwrite
. Vous pouvez spécifier le mode de durabilité de votre choix 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établir 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 le changement localement avant son déploiement
Ce changement prendra effet dans Chrome 121. Si vous souhaitez tester le nouveau comportement localement avant, activez l'indicateur #indexed-db-default-durability-relaxed
dans chrome://flags
.
En savoir plus
Pour en savoir plus sur cette modification et obtenir des informations techniques, consultez le bug de suivi et l'entrée sur l'état de la plate-forme Chrome.
En résumé, Chrome a décidé de modifier le mode de durabilité par défaut dans IndexedDB afin d'améliorer les performances tout en conservant la compatibilité avec les autres principaux navigateurs. Dans la plupart des cas, nous vous recommandons de ne rien faire, car le nouveau paramètre par défaut améliorera les performances. Si nécessaire, vous pouvez continuer à spécifier le mode de durabilité de votre choix, ce qui vous permet de contrôler la durabilité et les performances des données dans vos applications Web.
Remerciements
Cet article a été relu par Evan Stade et Rachel Andrew.