# Performances Vue 3 en 2026 : Vapor Mode, Alien Signals et la fin du Virtual DOM
> Plongée dans les performances du Vapor Mode de Vue 3.6 : comment il élimine le Virtual DOM, le système de réactivité Alien Signals, les benchmarks face à Solid.js et les techniques d'optimisation concrètes pour la production.
- Published: 2026-06-02
- Updated: 2026-06-06
- Author: SharpSkill
- Tags: vue, vue-3, vapor-mode, performance, virtual-dom, alien-signals, reactivity
- Reading time: 10 min
---
Le Vapor Mode de Vue 3.6 représente le changement d'architecture de rendu le plus important depuis l'adoption du Virtual DOM par Vue dans sa version 2. En compilant les Single File Components directement en opérations DOM impératives, le Vapor Mode élimine le surcoût de comparaison qui définit le pipeline de rendu de Vue depuis des années. Associé à la réécriture du système de réactivité Alien Signals, Vue 3.6 atteint la parité avec Solid.js et Svelte 5 sur les benchmarks, sans obliger les développeurs à apprendre une nouvelle API.
> **Le Vapor Mode en bref**
>
> Le Vapor Mode est une stratégie de compilation optionnelle introduite dans Vue 3.6 qui contourne entièrement le Virtual DOM. Les composants compilés en Vapor Mode relient chaque dépendance réactive directement au nœud DOM exact qu'elle affecte, produisant des mises à jour chirurgicales sans aucun parcours d'arbre. Son activation tient en un seul attribut : `
```
En mode VDOM classique, ce template se compile en une fonction de rendu qui retourne un arbre de nœuds virtuels. À chaque clic, Vue crée un nouvel arbre VDOM, le compare au précédent, détecte le changement du contenu textuel et applique le patch au DOM réel.
En Vapor Mode, le compilateur génère un code proche de ceci :
```javascript
// Sortie de compilation Vapor (simplifiée)
const button = document.createElement('button')
const text = document.createTextNode('Count: 0')
button.appendChild(text)
// Liaison directe : source réactive -> mutation DOM
effect(() => {
text.nodeValue = `Count: ${count.value}`
})
button.addEventListener('click', increment)
```
L'effet réactif relie `count` directement à `text.nodeValue`. Aucune création de VDOM, aucune comparaison, aucun patch. Le changement d'état déclenche exactement une mutation DOM.
### Activer le Vapor Mode dans un projet
Le Vapor Mode fonctionne au niveau du composant. Deux stratégies d'intégration existent :
```javascript
// vaporApp.js — Application 100 % Vapor (sans runtime VDOM)
import { createVaporApp } from 'vue'
import App from './App.vue'
createVaporApp(App).mount('#app')
```
```javascript
// hybridApp.js — Composants VDOM + Vapor mélangés
import { createApp, vaporInteropPlugin } from 'vue'
import App from './App.vue'
createApp(App)
.use(vaporInteropPlugin)
.mount('#app')
```
L'approche hybride permet une migration progressive. Les composants critiques en performance, tableaux de données, tableaux de bord temps réel, vues riches en animations, peuvent adopter Vapor pendant que le reste de l'application continue d'utiliser le runtime VDOM standard. Les deux types de composants coexistent dans le même arbre.
> **Limites du Vapor Mode dans Vue 3.6**
>
> Le Vapor Mode requiert la Composition API avec `
{{ product.name }}
{{ product.price }}
```
Le tableau `v-memo` `[product.id === selectedId, product.price]` indique à Vue : ne rends à nouveau cet élément que si l'état de sélection ou le prix ont changé. Pour une liste de 500 produits où un seul est sélectionné, cela réduit le travail VDOM de 500 comparaisons de sous-arbres à 2 (l'élément précédemment sélectionné et le nouveau).
### Composants asynchrones avec Suspense pour le découpage du code
Charger paresseusement les composants lourds garde le bundle initial léger. Le `defineAsyncComponent` de Vue associé à `Suspense` gère l'état de chargement de façon déclarative.
```vue
```
## Vapor Mode vs VDOM : quand utiliser chaque approche
Le Vapor Mode n'est pas un remplaçant universel du Virtual DOM. Chaque mode de compilation a des forces adaptées à différents profils de composants.
| Scénario | Mode recommandé | Raison |
|---|---|---|
| Tableaux de données (1000+ lignes) | Vapor | Élimine le surcoût VDOM par ligne |
| Tableaux de bord temps réel | Vapor | Les mises à jour fréquentes profitent de la liaison DOM directe |
| Composants riches en animations | Vapor | Aucune pression GC liée au brassage VDOM |
| Bibliothèques de composants tierces en VDOM | VDOM | La couche d'interop ajoute de la complexité |
| Composants utilisant l'Options API | VDOM | Vapor exige la Composition API |
| Formulaires à validation complexe | Indifférent | Surcoût de rendu minime dans les deux modes |
| Pages de contenu statique | Indifférent | Le SSG/SSR fait le gros du travail |
Le chemin de migration recommandé : profiler d'abord l'application avec l'onglet Performance de Vue DevTools. Repérer les composants au temps de rendu et à la fréquence de re-rendu les plus élevés. Les convertir en Vapor Mode, mesurer l'impact, puis étendre à partir de là.
## Questions d'entretien : performances Vue 3 et Vapor Mode
Ces questions reflètent ce que les équipes d'ingénierie demandent pour évaluer l'expertise Vue en 2026. Chaque réponse résume le raisonnement technique attendu par un recruteur.
**Q : Quel problème le Vapor Mode résout-il, et en quoi diffère-t-il des optimisations VDOM que Vue possédait déjà ?**
Le compilateur VDOM de Vue 3 optimisait déjà les sous-arbres statiques, ajoutait des patch flags et implémentait des block trees pour sauter les comparaisons inutiles. Cela réduisait le surcoût VDOM sans l'éliminer : chaque changement d'état exigeait toujours de créer des nœuds VDOM, de parcourir l'arbre et de générer des patchs. Le Vapor Mode supprime tout ce pipeline. Le compilateur fait correspondre l'état réactif directement aux mutations DOM, si bien qu'un changement d'état déclenche exactement les opérations DOM nécessaires : aucune structure de données intermédiaire, aucun algorithme de comparaison, aucun ramassage de nœuds VDOM jetés.
**Q : Les composants Vapor et VDOM peuvent-ils coexister dans la même application ?**
Oui. Le `vaporInteropPlugin` autorise les deux types de composants dans un même arbre. Un parent VDOM peut rendre des enfants Vapor et inversement, avec quelques réserves : les slots Vapor ne peuvent pas utiliser `slots.default()` à l'intérieur d'un composant VDOM (utiliser `renderSlot` à la place), et l'interopérabilité avec les bibliothèques de composants en VDOM (Vuetify, PrimeVue) peut présenter des aspérités pendant la phase expérimentale.
**Q : Expliquez le modèle de réactivité push-pull des Alien Signals dans Vue 3.6.**
Le modèle push-pull divise les mises à jour réactives en deux phases. Dans la phase push, lorsqu'un signal change de valeur, le système propage un drapeau dirty en aval vers toutes les propriétés calculées dépendantes : c'est peu coûteux puisqu'il ne fait que basculer des drapeaux booléens. Dans la phase pull, lorsqu'une valeur calculée est réellement lue, elle vérifie si elle est dirty. Si oui, elle recalcule à partir de ses dépendances. Sinon, elle retourne la valeur en cache. Cela évite de recalculer trop tôt des propriétés calculées qui pourraient ne jamais être lues durant un cycle de mise à jour donné.
**Q : Quand faut-il utiliser `shallowRef` plutôt que `ref` dans une application Vue 3 ?**
`shallowRef` convient lorsque la structure de données est grande et que seule la réassignation de premier niveau doit déclencher la réactivité : caches de réponses d'API, objets de configuration et grands tableaux où les mutations d'éléments individuels sont gérées manuellement avec `triggerRef()`. La réactivité profonde enveloppe chaque propriété imbriquée dans un Proxy, un surcoût inutile pour des données qui seront remplacées en bloc plutôt que mutées sur place.
Pour s'entraîner davantage, consultez les [questions d'entretien Vue.js](/technologies/vue-nuxt/interview-questions/vue-composables) sur les composables et les patrons de réactivité sur SharpSkill.
> **Pour aller plus loin**
>
> Le [guide de performance officiel de Vue.js](https://vuejs.org/guide/best-practices/performance) couvre d'autres techniques d'optimisation, notamment la stabilité des props, le défilement virtuel et le streaming SSR. Les [notes de version de la bêta Vue 3.6](https://github.com/vuejs/core/releases/tag/v3.6.0-beta.1) documentent chaque API du Vapor Mode et ses limitations connues.
## Conclusion
- Le Vapor Mode compile les SFC Vue en opérations DOM directes, éliminant entièrement le surcoût de création, de comparaison et de patch du Virtual DOM
- Il s'active par composant avec `