


Virtual DOM : technique derrière les mises à jour rapides du DOM de React.
Bonjour à tous, je suis ravi de lancer une nouvelle série d'articles dans lesquels je vais essayer d'expliquer divers concepts du monde de la programmation. Nous couvrirons tout, des termes comme idempotent et idiomatique aux concepts plus spécifiques liés aux bibliothèques et aux frameworks. Et aujourd’hui, nous allons aborder l’un de ces sujets : DOM virtuel.
Si vous trouvez cela utile, n'oubliez pas de Aimer, partager et commenter sur les sujets que vous aimeriez que j'aborde ensuite. Ne perdons plus de temps et sautons directement dans le DOM virtuel !
REMARQUE : Avant de continuer, il est important de comprendre que le concept de DOM virtuel n'est pas exclusif à React. D'autres bibliothèques frontales JavaScript, comme Vue, l'utilisent également pour améliorer les performances de rendu.
DOMAINE
Le DOM (Document Object Model) est une représentation arborescente d'un document HTML (ou d'une page Web/application Web) utilisant des nœuds ou des objets. Le DOM a été conçu pour que les bibliothèques et frameworks frontend (javascript) puissent interagir avec et manipuler le document par programme via son API.
Pourquoi le DOM virtuel
Bien que le DOM offre un moyen efficace de manipuler un document via son API, les performances peuvent devenir un problème lorsqu'il y a des milliers d'éléments à l'écran. En effet, les mises à jour dans le DOM impliquent souvent la destruction et la recréation de sous-arbres entiers.
C'est là que le DOM virtuel entre en jeu. Le DOM virtuel est une représentation légère en mémoire du DOM réel, permettant une synchronisation rapide et efficace des modifications avec le DOM réel — un processus connu sous le nom de Réconciliation.
Les éléments clés à retenir ici sont :
- Le Virtual DOM est une version allégée du Real DOM, ce qui signifie qu'il n'a pas toutes les propriétés du Real DOM, ce qui le rend plus efficace à utiliser.
- Le DOM virtuel existe en mémoire, permettant une manipulation plus rapide et plus efficace avant que les modifications ne soient appliquées au DOM réel.
Dans cette optique, les bibliothèques JavaScript qui utilisent l'API DOM créent leur propre DOM virtuel et le manipulent. Ils mettent à jour le Real DOM uniquement lorsque cela est nécessaire, et même dans ce cas, avec un minimum d'opérations.
Comment le DOM virtuel est-il géré dans React ??
React JS est une bibliothèque populaire développée par Facebook pour créer des interfaces utilisateur. En raison de sa simplicité, il a gagné en popularité et est utilisé dans de nombreux projets Web modernes.
Comme beaucoup d'autres bibliothèques frontales JS, React utilise le concept de DOM virtuel pour gérer efficacement les nouveaux rendus et les mises à jour dans une application.
React utilise un algorithme de comparaison ainsi qu'une technique de réconciliation pour optimiser ce processus. (Plus précisément, la bibliothèque ReactDOM gère cela en coulisses.)
Décomposons-le étape par étape :
-
Fonction render() du composant React
- La fonction render() du composant React crée d'abord le React Element/Virtual DOM avec le JSX.
- Il contient une version allégée de son homologue Real DOM et des propriétés supplémentaires telles que $$typeof, props, pour faciliter une comparaison efficace.
-
Algorithme de différence
- Chaque fois qu'un composant React est mis à jour, un nouveau DOM virtuel est créé et le processus de comparaison commence. Il s'agit d'un algorithme heuristique O(n) basé sur deux hypothèses clés.
- Différents types d'éléments produisent différents arbres.
- Un accessoire clé peut être utilisé pour suivre quels éléments enfants restent cohérents entre les rendus.
- Chaque fois qu'un composant React est mis à jour, un nouveau DOM virtuel est créé et le processus de comparaison commence. Il s'agit d'un algorithme heuristique O(n) basé sur deux hypothèses clés.
2.1. Étapes de l'algorithme de comparaison
- Lorsque l'algorithme rencontre deux types différents d'éléments DOM : il démolira l'ancien DOM virtuel et en créera un nouveau à partir de zéro en fonction des spécifications du nouvel élément.
- Lorsque React rencontre les mêmes types d'éléments DOM : il préserve l'ancien objet DOM et ne met à jour que les attributs modifiés.
- Pour Éléments React du même type, React conserve l'ancien objet DOM intact et fournit des accessoires mis à jour.
- Lors de la gestion des éléments enfants, React parcourt les deux ensembles d'enfants (ancienne arborescence DOM virtuelle et arborescence nouvellement créée), en effectuant des mises à jour là où des différences existent.
2.2. Pourquoi utiliser des clés ?
Comme mentionné dans le dernier point, l'algorithme de différence parcourt les listes d'enfants et apporte des modifications si nécessaire. Si vous n'utilisez pas de clés dans une liste d'enfants, les performances pourraient en souffrir et vous pourriez rencontrer un comportement inattendu.
Voyons un exemple :
<ul> // old list <li>apple</li> <li>pineapple</li> </ul> <ul> // new list <li>apple</li> <li>pineapple</li> <li>grape</li> </ul>
Dans le scénario ci-dessus, l'algorithme peut réellement gérer efficacement la modification. Il examine chaque enfant d'index et trouve
Mais disons, nous voulons ajouter le
<ul> // old list <li>apple</li> <li>pineapple</li> </ul> <ul> // new list <li>apple</li> <li>pineapple</li> <li>grape</li> </ul>
Ici, les performances de l'algorithme diminueront à mesure qu'il verra
Pour résoudre ce goulot d'étranglement des performances, l'équipe React utilise la clé qui est un identifiant unique attaché à la liste des éléments enfants qui peuvent être utilisés par l'algorithme pour déterminer si l'élément peut être laissé intact et il suffit de réorganiser le poste ou doit être recréé.
<ul> // old list <li>apple</li> <li>pineapple</li> </ul> <ul> // new list <li>grape</li> <li>apple</li> <li>pineapple</li> </ul>
React peut désormais utiliser les attributs Key et repositionner uniquement les éléments enfants non mis à jour lors de l'ajout du nouvel élément enfant.
3) La fonction render() de ReactDOM
Enfin, la fonction render() de ReactDOM est appelée, ce qui concilie les différences entre le nouveau Virtual DOM et le Real DOM. Cela entraîne un minimum d'opérations nécessaires pour restituer le HTML efficacement.
Conclusion
Dans cet article, nous avons exploré le DOM virtuel, une technique utilisée par de nombreuses bibliothèques frontales pour gérer efficacement les modifications de données et d'éléments avec un minimum d'opérations DOM. Nous avons également examiné comment React utilise spécifiquement un processus de comparaison et de réconciliation pour optimiser les mises à jour.
J'espère que cet article vous a aidé à mieux comprendre le fonctionnement du DOM virtuel. Même si vous connaissiez le concept, j'espère Vous savez maintenant ce qu'est Virtual DOM et comment il contribue à la création d'un environnement frontend optimisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

C et C jouent un rôle essentiel dans le moteur JavaScript, principalement utilisé pour implémenter des interprètes et des compilateurs JIT. 1) C est utilisé pour analyser le code source JavaScript et générer une arborescence de syntaxe abstraite. 2) C est responsable de la génération et de l'exécution de bytecode. 3) C met en œuvre le compilateur JIT, optimise et compile le code de point chaud à l'exécution et améliore considérablement l'efficacité d'exécution de JavaScript.

Python est plus adapté à la science et à l'automatisation des données, tandis que JavaScript est plus adapté au développement frontal et complet. 1. Python fonctionne bien dans la science des données et l'apprentissage automatique, en utilisant des bibliothèques telles que Numpy et Pandas pour le traitement et la modélisation des données. 2. Python est concis et efficace dans l'automatisation et les scripts. 3. JavaScript est indispensable dans le développement frontal et est utilisé pour créer des pages Web dynamiques et des applications à une seule page. 4. JavaScript joue un rôle dans le développement back-end via Node.js et prend en charge le développement complet de la pile.
