Pourquoi est-Réagir au concept de Virtuel DOM dit d'être plus performants que sale vérification de modèle?
J'ai vu un Réagir dev parler à http://www.youtube.com/watch?v=x7cQ3mrcKaY et l'orateur a mentionné qu'sale-vérification du modèle peut être lent. Mais n'est-ce pas le calcul de la différence entre le virtuel DOMs en fait même moins performant depuis le virtuel DOM, dans la plupart des cas, devrait être plus grand que le modèle?
J'aime vraiment le potentiel de puissance du Virtuel DOM (surtout rendu côté serveur) mais je voudrais savoir tous les avantages et les inconvénients.
- Je pense que vous pourriez mentionner ce discours trop youtube.com/watch?v=-DX3vJiqxm4 où il a spécifiquement parle de repères.
Vous devez vous connecter pour publier un commentaire.
Je suis l'auteur principal d'un virtuel-dom module, donc je pourrais être en mesure de répondre à vos questions. Il existe en fait 2 problèmes qui doivent être résolus ici
À Réagir, chacun de vos composants ont un état. Cet état est comme un fait observable que vous pourriez trouver dans knock-out ou autres MVVM les bibliothèques de styles. Essentiellement, Réagir sait quand à nouveau le rendu de la scène car il est en mesure d'observer lorsque cette modification des données. Sale, le contrôle est plus lent que observables parce que vous devez interroger les données à intervalles réguliers, et de vérifier toutes les valeurs dans la structure de données récursive. Par comparaison, la définition de la valeur sur l'état de signal à un écouteur de l'état a changé, afin de Réagir pouvez simplement écouter les événements de changement de l'état et de la file d'attente ré-rendu.
Le virtuel DOM est utilisé pour l'efficacité de la ré-rendu de la DOM. Ce n'est pas vraiment sale, de vérifier vos données. Vous pourriez rendre à nouveau à l'aide d'un virtual DOM avec ou sans salir la vérification. Vous avez raison en ce que il ya une surcharge dans le calcul de la diff entre les deux virtuel arbres, mais le virtuel DOM diff est de comprendre ce que les besoins de mise à jour dans les DOM et pas de savoir si ou non vos données a changé. En fait, l'algorithme de comparaison est un sale vérificateur lui-même mais il est utilisé pour voir si le DOM est sale à la place.
Nous avons pour objectif de re-rendre l'arborescence virtuelle uniquement lorsque les changements d'état. Donc à l'aide d'une observable pour vérifier si l'état a changé, c'est un moyen efficace pour éviter de re-rend, qui pourrait causer beaucoup de complications inutiles arbre de diff. Si rien n'a changé, nous ne faisons rien.
Virtuel DOM est intéressante parce qu'elle nous permet d'écrire notre code comme si nous étions rendu l'ensemble de la scène. Derrière les scènes que nous voulons calculer une opération de patch de mise à jour des DOM regarder comment nous nous y attendons. Ainsi, alors que le virtuel DOM diff/patch algorithme est probablement pas la solution optimale, il nous donne une très belle façon d'exprimer nos applications. Nous venons de déclarer exactement ce que nous voulons et de Réagir/virtual-dom va travailler sur la façon de rendre votre scène ressembler à ceci. Nous n'avons pas à le faire en manuel de manipulation du DOM ou se confondre sur les précédentes DOM état. Nous n'avons pas à refaire le rendu de l'ensemble de la scène, ce qui pourrait être beaucoup moins efficace que de le corriger.
unnecessary re-renders
?this.state.cats = 99
vous auriez encore besoin sale de vérifier, pour vérifier le changement de modèle, tout comme Angulaire sale vérifie la valeur de $portée de l'arbre. Ce n'est pas une comparaison de la vitesse des deux techniques, c'est tout simplement une déclaration qui Réagissent de ne pas faire sale vérification parce qu'il a une épine Dorsale de style setter à la place.J'ai lu récemment un article détaillé sur les Réagissent de l'algorithme de comparaison ici: http://calendar.perfplanet.com/2013/diff/. Ce que je comprends, ce qui fait Réagir vite est:
Par rapport à sale-case, les principales différences de l'OMI sont:
Modèle de sale-vérification: Réagir composant est explicitement définie comme sale chaque fois que
setState
est appelé, donc il n'y a pas de comparaison (des données) nécessaires ici. Pour une sale de vérification, la comparaison (des modèles) est toujours possible de chaque digérer boucle.DOM mise à jour: DOM opérations sont très coûteuses en raison de la modification du DOM s'applique également et calculer les styles CSS, les mises en page. Le gain de temps inutiles DOM modification peut être plus long que le temps passé de comparaison, le virtuel DOM.
Le deuxième point est encore plus important pour les non-triviales telles que les modèles de l'un avec l'énorme quantité de champs ou grande liste. Un champ de changer de modèle complexe entraînera seulement les opérations nécessaires pour les éléments DOM, impliquant que sur le terrain, au lieu de l'ensemble de la vue/template.
$scope.$digest
est exécutée plusieurs fois par digérer cycle, il est donc temps multiples de données complète de comparaison par rapport à un seul temps partiel virtuel arborescence DOM comparaison.Réagir n'est pas le seul de manipulation du DOM de la bibliothèque. Je vous encourage à examiner les solutions de rechange à la lecture de ce l'article de Auth0 qui comprend des explications détaillées et des points de référence. Je vais mettre en évidence ici, leurs avantages et leurs inconvénients, comme vous avez demandé:
Voici un commentaire par Réagir membre de l'équipe de Sebastian Markbåge qui jette un peu de lumière:
https://news.ycombinator.com/item?id=6937668
Vous pouvez lire cette(https://reactkungfu.com/2015/10/the-difference-between-virtual-dom-and-dom/) artical savoir sur le Réel DOM Virtuels et des DOM. Espérons qu'il saura vous aider!
Virtuel Dom n'est pas inventé par réagir. C'est une partie du dom HTML.
Il est léger et détaché à partir du navigateur de mise en œuvre de détails.
Nous pouvons penser virtuel DOM Réagir locaux et copie simplifiée du DOM HTML. Il permet de Réagir à faire ses calculs à l'intérieur de ce monde abstrait et sauter le “réel” DOM opérations, souvent lent et spécifiques à chaque navigateur. En fait il n'y a pas grand differenc entre les DOM et VIRTUEL DOM.
Ci-dessous sont les points pourquoi Virtuel Dom est utilisé (source https://hackernoon.com/virtual-dom-in-reactjs-43a3fdb1d130):
Ainsi que la mise à jour du modèle DOM des propriétés ie. des valeurs. Il suit un algorithme.
Maintenant, supposons que si vous mettez à jour les DOM 10 fois directement, puis toutes les étapes ci-dessus va exécuter un par un, et la mise à jour de DOM algorithmes faudra du temps pour les mises à jour de DOM valeurs.
C'est pourquoi le Vrai DOM est plus lent que le virtuel DOM.