Fermer

juillet 17, 2020

Une vue sur la nouvelle vue À quoi s'attendre dans Vue 3


La prochaine version de Vue apporte de nombreuses améliorations par rapport à son prédécesseur. Il sera plus rapide, plus petit et offrira de nouvelles fonctionnalités. Dans cet article, nous passons en revue ce que Vue 3 offrira.

Au moment de la rédaction de cet article, Vue 3 est en version bêta, et la version stable devrait sortir dans la seconde moitié de 2020. La prochaine version introduit de nouvelles fonctionnalités et améliorations par rapport à Vue 2. Les objectifs de Vue 3 étaient de le rendre plus rapide, plus petit, plus facile à gérer et plus facile à utiliser pour cibler différentes plates-formes que le Web.

Nouvelle implémentation de réactivité basée sur des proxys

L'implémentation interne de Vue a a été réécrit pour utiliser les nouvelles fonctionnalités de langage qui ont été introduites dans ES2015. La prochaine version de Vue utilisera des mandataires pour son système de réactivité, au lieu de Object.defineProperty . Ce changement éliminera les mises en garde, qui sont actuellement présentes dans la deuxième version du framework. Par exemple, Vue n'est pas capable de détecter l'ajout et la suppression de propriété.

 const  vm  =   new   Vue  ( {
données :   {
petName :   'Roger' 
	} 
} ) 



vm .  petAge  =   2 


De même, la mise à jour des éléments qui sont imbriqués dans un tableau ne sera pas non plus détectée.

 const  vm  = [19659006] nouveau   Vue  ( {
données :   {
myPets :   [ 'dog'   'fish'   'cat' ] 
	} 
}  ) 


vm .  myPets  [ 2 ]   =   'rat' 
vm .  items .  length  =   5 

Pour résoudre ces problèmes, Vue fournit $ set et $ delete méthodes. Avec l'introduction de procurations, ces méthodes ne seront plus nécessaires. Les proxies sont désormais pris en charge dans tous les principaux navigateurs; malheureusement, il n'y a aucun moyen de les polyfill pour les anciens navigateurs comme Internet Explorer. Par conséquent, Vue 3 offrira deux versions, une avec une réactivité basée sur un proxy et une basée sur une ancienne implémentation de réactivité. Cela signifie bien sûr que les mises en garde mentionnées seront toujours présentes, mais vous pouvez utiliser Vue 3, même si vous devez prendre en charge des navigateurs plus anciens.

Améliorations des performances et réécriture de VirtualDOM

Vue 3 sera beaucoup plus rapide et plus petit que son prédécesseur. Un fichier compressé et minifié pour Vue@2.6.10 pèse environ 20 Ko, tandis que Vue 3 est estimé à la moitié de la taille. C'est une grande amélioration de la taille et améliorera le temps de chargement. Moins il y a de code, mieux c'est après tout.

De plus, l’équipe Vue a apporté de grandes améliorations à l’implémentation de virtualDOM qui a été réécrite à partir de zéro et permet un montage et des correctifs jusqu'à 100% plus rapides. L'image ci-dessous montre la comparaison des performances entre les versions 2.5 et 3. La nouvelle version est deux fois plus rapide et n'utilise que la moitié de la mémoire.

 Comparaison des performances Vue 2.5 vs Vue 3

De plus, avec la nouvelle implémentation de virtualDOM , le runtime recevra plus d'indications sur la façon de traiter le code et de prendre des chemins rapides chaque fois que possible. Le compilateur créera également un meilleur code optimisé et des nœuds statiques de levage, pour accélérer et éviter le rendu inutile. levage et levage en ligne du manipulateur. Vous pouvez en savoir plus à ce sujet dans la présentation d'Evan ici .

TypeScript

L'équipe principale de Vue a décidé de passer de Flow à TypeScript pour le développement de Vue 3. Grâce à cela, les développeurs qui utilisent TypeScript pour créer leur application aura de meilleurs indices de type, et même s'ils n'utilisent pas TypeScript, certains éditeurs de code comme VS Code fourniront également plus d'informations pendant le développement. En plus de cela, il sera également plus facile d'utiliser TypeScript dans Vue 3. Dans Vue 2, la plupart des développeurs utilisent la bibliothèque vue-class-component mais grâce à l'API Composition, Vue sera plus compatible avec TypeScript

API de composition

L'API de composition est une nouvelle façon d'écrire une logique avec état dans les composants Vue. Jusqu'à présent, nous pourrions utiliser des mixins, des slots à portée ou des composants d'ordre supérieur, mais tous ont leurs inconvénients. Cette fonctionnalité est inspirée des crochets de React, mais un peu mieux, car elle évite quelques mises en garde. Par exemple, les hooks de Vue ne seront pas appelés sur chaque rendu, mais juste une fois, dans la méthode de configuration. Grâce à cela, il y aura moins de travail pour le ramasse-miettes.

De plus, ils peuvent être utilisés de manière conditionnelle, ne sont pas sensibles à l'ordre des appels et évitent un problème avec des valeurs périmées. Vous pouvez trouver plus d'informations sur les différences dans la documentation de l'API Composition . J'ai déjà écrit un article dédié à l'API de composition et comment elle peut être utilisée. Vous pouvez le trouver ici .

Packages découplés

Dans Vue 3, les packages internes sont divisés en fichiers séparés. Cela se traduira par un code source plus modulaire et maintenable pour l'équipe travaillant sur le framework. Cela facilitera également l’utilisation du moteur de rendu de Vue sur des cibles différentes du Web. De bons exemples sont Weex et NativeScript – ce sont des frameworks qui utilisent Vue pour créer des applications mobiles.

 Paquets découplés

Native Portals

Normalement, les éléments sont rendus exactement là où ils sont définis. Cependant, nous aimerions parfois rendre des éléments ailleurs dans une application. Par exemple, si nous avons un composant modal global, ce serait bien de pouvoir l'ouvrir et de définir son contenu de n'importe où dans l'application. Pour le moment, cela est possible grâce au package portal-vue . Dans Vue 3, cette fonctionnalité est prête à l'emploi, mais elle s'appelle Teleport .

 // Quelque part en hauteur dans votre application

// Plus bas dans l'application J'ai été téléporté!

Fragments

À l'heure actuelle, un modèle Vue doit toujours avoir un élément racine comme ceci:

 // Un élément racine uniquement dans un modèle