DOM virtuel (Virtual DOM)

Le DOM virtuel est une représentation légère en mémoire de l’arbre DOM réel, utilisée par certaines bibliothèques JavaScript (comme React ou Vue) pour optimiser les mises à jour de l’interface utilisateur et réduire les accès coûteux au DOM natif.

C’est une technique de performance pour minimiser les manipulations directes du DOM réel.

Pourquoi existe-t-il ? Le problème du DOM réel

Le DOM du navigateur est lent à modifier :

  • Chaque changement (ex. : element.innerHTML = …) peut déclencher un recalcul de style, une relayout, un repeint → coûteux en CPU.
  • Mettre à jour 100 éléments un par un = 100 re-rendus → interface saccadée.

Le DOM virtuel résout cela en regroupant les modifications et en ne touchant le DOM réel qu’une seule fois.

Comment ça marche ? (en 3 étapes)

  1. Création du Virtual DOM
    → À chaque changement d’état (ex. : clic, données API), la bibliothèque reconstruit en mémoire une copie légère du DOM futur.
  2. Diffing (comparaison)
    → Un algorithme compare le Virtual DOM actuel avec le précédent pour identifier les différences minimales.
  3. Reconciliation (mise à jour ciblée)
    → Seules les modifications nécessaires sont appliquées au DOM réel → gain de performance.

Analogie simple :

  • DOM réel = une maison physique.
  • Virtual DOM = un plan 3D sur ordinateur.
  • Au lieu de casser un mur chaque fois qu’on veut essayer une déco, on simule les changements sur le plan, puis on fait une seule intervention réelle.

Implémentations connues

BibliothèqueUtilise un Virtual DOM ?
ReactOui (cœur de sa performance)
Vue.js (v2)Oui
Vue.js (v3)Oui (optimisé)
SvelteNon → compile les mises à jour au build
SolidJSNon → réactivité fine sans VDOM
PreactOui (version légère de React)

Tendance récente : certaines bibliothèques abandonnent le Virtual DOM au profit de la compilation statique (Svelte) ou de la réactivité fine (SolidJS), car le VDOM a un coût mémoire.

DOM réel vs DOM virtuel

DOM réelDOM virtuel
NatureAPI du navigateur (standard)Structure JavaScript en mémoire
PerformanceLent pour les mises à jour fréquentesRapide pour les UI dynamiques
ContrôleDirect, mais coûteuxIndirect, mais optimisé
MémoireFixeAjoute une couche en mémoire

Idées reçues à corriger

  • « Le Virtual DOM est toujours plus rapide » → Faux : pour des sites statiques ou peu interactifs, il alourdit inutilement.
  • « C’est une technologie du navigateur » → Faux : c’est 100 % côté client, implémenté par des bibliothèques JavaScript.
  • « Tous les frameworks l’utilisent » → Faux : Svelte, SolidJS, Qwik… n’en ont pas besoin.
Les contenus de définition restent publics. Les ressources (outils, grilles, supports) liées à cette fiche sont disponibles dans l’espace membre.