По поводу виртуал дом, кто нибудь когда нибудь делал виртуал дом?
Есть 2 варианта построения, делать 2 дерева, одно будет отражать физическое состояние элементов в браузере, а второе виртуальное, изменения производим с виртуальным деревом, а когда надо вычисляем разницу и отрисовываем недостающие куски и убираем лишние из "физического" дерева, а заодно и из самого дом. так делает реакт.
И есть второй способ я его только что придумал, есть просто отдно виртуальное дерево, где у каждой ноды есть свойство physical и там либо null либо ссылка на физический обьект, и не нужно ни какой разницы вычислять, если там нет ноды значит нужно её нарисовать, если элемент удаляется из виртуального дерева и в свойстве лежит нода, то и её надо из её родителя надо удалить
С другой стороны должна быть гибкость и возможность отрендерить в html строку, но я думаю тут свойство physical не помеха)