Чем именно виртуальный дом выигрывает в обновлении в сравнение с реальным домом?
==================================================================================

 Объясните пожалуйста разницу между обновлением обычного дома и виртуального. Насколько я понял виртуальный дом это js объект и если делаются изменения в нём меняется узлы и потом сравнивается с реальным домом и в реальном доме меняются только те узлы которые были изменены. Почему в реальном доме нельзя таким же образом менять только те узлы которые изменились?  

Много где читал что изменения в виртуальном доме вызывает изменение всего дом дерева так ли это?  

Нашёл статью в которой пишут что виртуальный дом обновляется очень часто а реальный только 60 раз в секунду. То есть виртуальный накапливает изменение но реальный будет обновляться не чаще чем 60 раз в секунду и именно этим он быстрее.  

В конечном результате всё-равно виртуальный дом сравнивается с реальным изменяет только некоторые узлы, так почему сразу не сравнивать узлы которые изменились с реальным домом?  

Почему обновление реального дома очень затратно И как так получилось что создание новой абстракции в виде виртуального дома сделала его только быстрее? 

> Почему в реальном доме нельзя таким же образом менять только те узлы которые изменились?

  

Если меняешь только 1 узел, разницы практически не будет.  

Если меняешь целое дерево - уже сложнее.  

Если писать руками, то можно пойти двумя путями:  

1. Снести всё (под)дерево в реальном доме, а потом построить новое заново  

2. Руками пройтись по дереву в реальном доме и изменить только те узлы, в которых реально поменялись данные.  

  

Второй вариант будет экономить на вставках, но тогда придётся все элементы вычитывать из дома, а если это будет происходить в цикле, или просто очень часто, то возникнут заметные тормоза.  

По-хорошему надо сохранять и кэшировать элементы, чтобы их по 10 раз не вычитывать.  

  

Вот этим virtual DOM и занимается вместо разработчика.  

  

> Много где читал что изменения в виртуальном доме вызывает изменение всего дом дерева так ли это?

  

Это плохой сценарий, если используется что-то неправильно, или если реально надо перестроить всё дерево.  

  

> В конечном результате всё-равно виртуальный дом сравнивается с реальным изменяет только некоторые узлы, так почему сразу не сравнивать узлы которые изменились с реальным домом?  
> 
> 

  

Описал выше - получится тогда vdom, либо потеряешь очень много производительности из-за постоянных запросов к дому.  

  

> Почему обновление реального дома очень затратно И как так получилось что создание новой абстракции в виде виртуального дома сделала его только быстрее?

  

Затратно, тк это обращение к API браузера, которое медленнее, чем просто обратиться к объекту в JS.  

А выигрыш из-за того что мало кто хочет самостоятельно писать такую абстракцию для эффективной работы с реальным DOM. 

 Приветствую. Вот хорошая статья, которая объяснит вам преимущество virtual dom. [Что такое Virtual DOM?](https://habr.com/ru/post/256965/)