tgoop.com/zede_code/118
Last Update:
VDOM был ошибкой!
Сейчас все чаще виден тренд по уходу от VDOM на фронте во имя оптимизации.
Angular перешел на Ivy и стал редким представителем инкрементального дома
Svelte и Solid изначально отказались от VDOM в пользу генерации мутаций на основе работы сигналов.
Vue тоже активно работает над Vapor режимом в котором тоже не будет VDOM.
Но на собесах по React и не только, все еще на вопрос про VDOM, говорят что VDOM нужен для оптимизации работы с DOM, а тут выясняется, что фреймворки избавляются от VDOM по этой же причине. Так в чем же дело?
Всем концептам нужно время на развитие и улучшения, не все приходит сразу.
VDOM хорош не тем что он "оптимизирует" сам доступ к DOM, а то что он может собирать изменения и сам выбирать момент когда произойдет изменение и делать это в оптимальный момент и нужными порциями. Также VDOM достаточно простая и понятная модель: делаем легковесное представление DOM и синхронизируем изменения после вычисления изменения сравнением старого и нового VDOM. Предельно просто и понятно.
Но с самого начала шли разговоры, что вот это виртуальное представление отжирает память и делает лишнюю работу, почему бы не собирать изменения и просто не применять их без необходимости пробегаться по деревьям? Отличная идея, только вот сигналов которые были бы достаточно для этого развиты долгое время не было. И главное: нужен хороший КОМПИЛЯТОР. VDOM очень легко конструировать из однотипных кусочков как createElement / h. Однако если мы хотим отказаться от VDOM, то нам нужно компилировать гораздо более сложные конструкции. Те мы должны суметь распутать клубок связей и сформировать из них наиболее оптимальные пути доступа к DOM. И для небольших даже приложений количество реактивных связей между сигналами становится очень много, поэтому сигналы должны быть достаточно оптимизированы для работы с развесистыми графами.
Вот и понадобилось время, чтобы обе проблемы решить: компиляцию шаблонов и достаточно производительную систему реактивности, чтобы получить буст, а не падение перфа при отказе от VDOM. Сам же React тоже уже сильно проработал свой VDOM с конкурентными рендерингами и Fiber-ом, но отказываться они от него уже вряд ли будут как другие фреймворки. Как минимум для этого будет нужно перейти на концепцию сигналов, что не очень совпадает с видением авторов.
Забавный момент. При разработке Vue Vapor первые версии Vapor были по производительности ниже нежели чем VDOM версии, поэтому в 2024 мы и видели несколько раундов оптимизации реактивности и как итог на Dev сборках Vapor смог обогнать даже Svelte и Solid!
Поэтому VDOM был шагом к оптимизации работы с DOM и важным шагом. а вовсе не ошибкой, но развитие концепции сигналов и компиляции шаблонов сделали возможным отказ от многих избыточных действий. Ну и если смотреть на некоторые аспекты, то VDOM просто уехал в сигнальное представление.
P.S. Спасибо за 2000 подписок!
P.P.S. Отдельным пунктом можно конечно обозначить $mol в котором нет ни VDOM ни супер оптимизирующего компилятора, но там и шаблонов нет в привычном смысле, поэтому оставим его за скобками :D
BY zede code

Share with your friend now:
tgoop.com/zede_code/118