Vue 3.5 : La version 'mineure' qui a réécrit les règles de la performance frontend

Vue 3.5 : La version 'mineure' qui a réécrit les règles de la performance frontend

lschvn10 min de lecture

Vue 3.5 est sorti en septembre 2024 avec ce qu'Evan You a appelé une version mineure — et un système de réactivité refactoré qui livre 56% d'usage mémoire en moins et des opérations jusqu'à 10× plus rapides sur les grands tableaux profondément réactifs. La réponse de la communauté des développeurs était approximativement : "Cela ne ressemble pas à une version mineure."

Les chiffres confirment cet instinct. Le système de réactivité refactoré de Vue 3.5 livre des gains réels et mesurables.

Ce qui a rendu Vue 3.5 digne de mise à niveau

Un système de réactivité réécrit

Le changement central est une refonte interne complète de comment Vue suit l'état réactif. Le but était d'éliminer les valeurs computed stagnantes et les memory leaks qui pouvaient s'accumuler pendant le rendu côté serveur.

Le résultat était un gain net partout : usage mémoire réduit, meilleure performance sur les structures réactives profondément imbriquées, et résolution de problèmes durables avec les "computed suspendus" en contexte SSR. Critiquement, la refonte n'a eu aucun changement de comportement — tout ce qui marchait avant fonctionne toujours.

Destruction de props réactive, maintenant stabilisée

L'une des fonctionnalités les plus demandées du processus RFC de l'API Composition a atterri en 3.5 avec sa stabilisation. Précédemment, destructurer les props dans <script setup> cassait la réactivité.

// Avant 3.5 — la seule façon fiable
const props = withDefaults(
  defineProps<{
    count?: number
    message?: string
  }>(),
  { count: 0, message: 'hello' }
)

// Après 3.5 — la destruction native fonctionne réactivement
const { count = 0, message = 'hello' } = defineProps<{
  count?: number
  message?: string
}>()

Hydratation paresseuse pour SSR

Le rendu côté serveur a été un point de douleur connu. Vue 3.5 introduit une API de bas niveau pour contrôler la stratégie d'hydratation :

import { defineAsyncComponent, hydrateOnVisible } from 'vue'

const AsyncComp = defineAsyncComponent({
  loader: () => import('./HeavyChart.vue'),
  hydrate: hydrateOnVisible()
})

Les composants peuvent maintenant être différés jusqu'à ce qu'ils apparaissent dans le viewport.

useId() : IDs stables entre serveur et client

useId() résout le problème des IDs de formulaire qui diffèrent entre le serveur et le client :

<script setup>
import { useId } from 'vue'
const id = useId()
</script>

<template>
  <form>
    <label :for="id">Email:</label>
    <input :id="id" type="email" />
  </form>
</template>

La même composant rendu sur le serveur ou le client produit le même ID.

data-allow-mismatch

data-allow-mismatch permet de supprimer explicitement les avertissements pour les divergences connues entre serveur et client :

<span data-allow-mismatch>{{ user.localBirthday }}</span>

useTemplateRef()

useTemplateRef() résout le problème des refs de template qui nécessitaient des noms statiques :

<script setup>
import { useTemplateRef } from 'vue'
const inputRef = useTemplateRef('input')
</script>

<template>
  <input :ref="dynamicRefName" />
</template>

TypeScript : silencieusement en amélioration

Vue 3.5 a également amélioré l'inférence TypeScript pour les grands codebases.

Vue 3.6 : Ce qui vient

Le headline feature de Vue 3.6 est Vapor Mode.

Vapor Mode est une stratégie de compilation qui élimine le DOM virtuel entièrement. Au lieu de diffing un arbre DOM virtuel à chaque mise à jour, il compile les templates Vue en opérations DOM directes — la même stratégie que Solid.js utilise pour atteindre ses performances de benchmark.

La réclamation intéressante d'Evan You : Vapor Mode permet à Vue d'atteindre le niveau de performance de Solid.js tout en gardant l'API Vue exacte. Vous ne réécrivez pas vos composants. Vous opts des sous-arbres individuels en mode Vapor, et le compilateur s'occupe du reste.

L'objectif de performance : 100 000 montages de composants en 100 ms. Pour contexte, le DOM virtuel de Vue 3 gère environ 10 000-20 000 montages de composants dans le même laps de temps.

Vapor Mode est actuellement en bêta. L'intégration dans le dépôt principal Vue est en cours. Un release stable est attendu en 2026.

Également remarquable dans le pipeline 3.6 :

  • Alien Signals : Une réduction d'usage mémoire de 14% supplémentaire par rapport à 3.5
  • Vue base bundle sous 10KB : L'empreinte runtime diminue significativement

Pourquoi cela importe

L'évolution de Vue a suivi un patron intéressant. Chaque version a mené le framework plus loin de "outil simple pour petits projets" et plus près de "infrastructure sérieuse pour grandes applications" — sans abandonner l'expérience développeur qui a rendu Vue attrayant.

Vue 3.5 est une étude de cas de cet équilibre. Les améliorations mémoire et performance sont du type qui rend les systèmes de production mesurablement meilleurs — pas cosmétiques, pas théoriques, mais réels.

La trajectoire vers 3.6 et Vapor Mode suggère que Vue n'est pas satisfait de se contenter de correspondre à la concurrence. Il veut fixer la barre de performance. C'est une ambition intéressante pour un framework qui s'est toujours défini par l'accessibilité et l'ergonomie plutôt que la vitesse brute.

Que Vapor Mode tienne sa promesse — et qu'il puisse maintenir la compatibilité avec l'écosystème existant pendant la transition — déterminera si Vue 3.6 est rappelé comme un point de pivot ou juste une autre release. Les premiers signaux sont prometteurs.

Questions fréquentes

Articles connexes

Plus de couverture avec des sujets et tags en commun.

Oxc Construisit Discrètement En Rust Le Toolkit JavaScript Le Plus Rapide — Et Il Est Presque Prêt
javascript

Oxc Construisit Discrètement En Rust Le Toolkit JavaScript Le Plus Rapide — Et Il Est Presque Prêt

Alors qu'ESLint v10 se battait avec le ménage legacy, le projet Oxc a livré un linter 100x plus rapide, un formateur 30x plus rapide que Prettier, et un parser qui laisse SWC dans la poussière. Voici ce qu'est réellement le compilateur d'oxydation JavaScript.
Knip v6 Intègre le Parser oxc pour des Gains de Performance de 2 à 4x
typescript

Knip v6 Intègre le Parser oxc pour des Gains de Performance de 2 à 4x

L'outil populaire de détection de code mort en JavaScript et TypeScript adopte le parser Rust oxc, avec des gains de performance de 2 à 4 fois.
Pretext : La bibliothèque de mesure de texte sans DOM que les agents de codage IA utilisent déjà
javascript

Pretext : La bibliothèque de mesure de texte sans DOM que les agents de codage IA utilisent déjà

Cheng Lou vient de publier Pretext, une bibliothèque JavaScript pure qui mesure et dispose du texte multiligne sans toucher au DOM. Voici pourquoi c'est important pour la virtualisation, le contrôle de layout et les agents IA qui génèrent du code UI.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

Pas encore de commentaires. Soyez le premier à partager vos pensées.