Виртуальный дом. Костыль от которого пора отказаться
Виртуальный DOM (VDOM) больше не нужен. Веб не стоит на месте, как и браузеры. До сих пор вижу людей, которые считают его чем то крутым и актуальным, не вникая, что это вообще такое и зачем оно нужно.
Это оверхед
Чтобы понять, почему это стало оверхедом, давайте вернемся в прошлое, где данный оверхед был полезным хаком.
Все мы помним, что дергать DOM дерево это "дорогая" операция, которая требует ререндеринга/перерасчета того что видит юзер. Главная идея была в том, что бы минимизировать количество операций с DOM.
Делалось это так: создаем копию DOM в памяти (виртуальный DOM), вычисляем разницу (diff) между текущим и новым состоянием, а затем применяем только необходимые изменения, + эти изменения группируются и выполняются за один раз (батчинг).
Звучит круто? если вы застряли в прошлом, то "да", а сейчас это дикий оверхед, особенно когда DOM очень большой, не забываем что мы создаем полную копию DOM в памяти, и причем не одну, а две, что бы потом искать diff, что тоже занимает время.
Браузеры стали круче
Браузеры не стоят на месте, напрмяую обновить DOM проще и не требует таких затрат как это было 10-15 лет назад. Ваш браузер давно научился делать это опмитизированно, да и железо сейчас другое, а мы поверх этих оптимизаций до сих пор совершаем этот танец вокруг VDOM.
Если вы и вправду считаете что ваш танец на js быстрее чем c/c++, то вы сильно ошибаетесь. Вы просто заставляете браузер делать кучу других операций, вместо того что бы просто пойти и обновить DOM.
Взгляните на Svelte, Solid, Angular, у них нет VDOM, они и без него могут обновлять только нужные части ui. Скоро и Vue вступит в их клуб убрав этот ненужный оверхед со своего фреймворка (привет Vue Vapor).
Немного про Vue Vapor
Это вариант Vue, который предлагает рендеринг без VDOM.
Они давно смерджили Vapor с репой Vue и судья по коммитам, видно что активно над ним работают. В ближайшем будущем, они выкинут VDOM.
Результаты сами за себя говорят:
Когда на очередном собесе спросят за виртуальный дом, смело говорите что это неактуально и не имеет смысла, пойти и обновить дом сейчас проще и дешевле, а времена, когда это было дорого, давно прошли.