Почему в реальном доме нельзя таким же образом менять только те узлы которые изменились?
Если меняешь только 1 узел, разницы практически не будет.
Если меняешь целое дерево - уже сложнее.
Если писать руками, то можно пойти двумя путями:
1. Снести всё (под)дерево в реальном доме, а потом построить новое заново
2. Руками пройтись по дереву в реальном доме и изменить только те узлы, в которых реально поменялись данные.
Второй вариант будет экономить на вставках, но тогда придётся все элементы вычитывать из дома, а если это будет происходить в цикле, или просто очень часто, то возникнут заметные тормоза.
По-хорошему надо сохранять и кэшировать элементы, чтобы их по 10 раз не вычитывать.
Вот этим virtual DOM и занимается вместо разработчика.
Много где читал что изменения в виртуальном доме вызывает изменение всего дом дерева так ли это?
Это плохой сценарий, если используется что-то неправильно, или если реально надо перестроить всё дерево.
В конечном результате всё-равно виртуальный дом сравнивается с реальным изменяет только некоторые узлы, так почему сразу не сравнивать узлы которые изменились с реальным домом?
Описал выше - получится тогда vdom, либо потеряешь очень много производительности из-за постоянных запросов к дому.
Почему обновление реального дома очень затратно И как так получилось что создание новой абстракции в виде виртуального дома сделала его только быстрее?
Затратно, тк это обращение к API браузера, которое медленнее, чем просто обратиться к объекту в JS.
А выигрыш из-за того что мало кто хочет самостоятельно писать такую абстракцию для эффективной работы с реальным DOM.