Maison interface Web js tutoriel Virtual DOM : technique derrière les mises à jour rapides du DOM de React.

Virtual DOM : technique derrière les mises à jour rapides du DOM de React.

Oct 21, 2024 pm 08:42 PM

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.

Virtual DOM: Technque behind React

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.

Virtual DOM: Technque behind React

Les éléments clés à retenir ici sont :

  1. 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.
  2. 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 :

  1. 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.
  2. 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.
      1. Différents types d'éléments produisent différents arbres.
      2. Un accessoire clé peut être utilisé pour suivre quels éléments enfants restent cohérents entre les rendus.

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>
Copier après la connexion
Copier après la connexion

Dans le scénario ci-dessus, l'algorithme peut réellement gérer efficacement la modification. Il examine chaque enfant d'index et trouve

  • apple
  • &&
  • ananas
  • est le même dans les deux listes et ne leur fait rien tandis que
  • grape
  • n'est présent que dans la nouvelle liste, il en ajoute donc un à l'ancienne liste.

    Mais disons, nous voulons ajouter le

  • grape
  • au début.

    <ul> // old list
      <li>apple</li>
      <li>pineapple</li>
    </ul>
    
    <ul> // new list
      <li>apple</li>
      <li>pineapple</li>
      <li>grape</li>
    </ul>
    
    Copier après la connexion
    Copier après la connexion

    Ici, les performances de l'algorithme diminueront à mesure qu'il verra

  • grape
  • à la place de
  • apple
  • ,
  • apple
  • à la place de
  • ananas
  • et un nouveau
  • ananas
  • en dernière position. Recréant ainsi tous les éléments du strach.

    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>
    
    Copier après la connexion

    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!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    Video Face Swap

    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

    <🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    <🎜>: Grow A Garden - Guide de mutation complet
    3 Il y a quelques semaines By DDD
    Nordhold: Système de fusion, expliqué
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

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

    Sujets chauds

    Tutoriel Java
    1676
    14
    Tutoriel PHP
    1278
    29
    Tutoriel C#
    1257
    24
    Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Apr 16, 2025 am 12:12 AM

    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.

    Javascript et le web: fonctionnalité de base et cas d'utilisation Javascript et le web: fonctionnalité de base et cas d'utilisation Apr 18, 2025 am 12:19 AM

    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.

    JavaScript en action: Exemples et projets du monde réel JavaScript en action: Exemples et projets du monde réel Apr 19, 2025 am 12:13 AM

    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 moteur JavaScript: détails de l'implémentation Comprendre le moteur JavaScript: détails de l'implémentation Apr 17, 2025 am 12:05 AM

    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 vs JavaScript: communauté, bibliothèques et ressources Python vs JavaScript: communauté, bibliothèques et ressources Apr 15, 2025 am 12:16 AM

    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.

    Python vs JavaScript: environnements et outils de développement Python vs JavaScript: environnements et outils de développement Apr 26, 2025 am 12:09 AM

    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.

    Le rôle de C / C dans les interprètes et compilateurs JavaScript Le rôle de C / C dans les interprètes et compilateurs JavaScript Apr 20, 2025 am 12:01 AM

    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 vs JavaScript: cas d'utilisation et applications comparées Python vs JavaScript: cas d'utilisation et applications comparées Apr 21, 2025 am 12:01 AM

    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.

    See all articles