Чем Glimmer VM отличается от виртуального дома? - PullRequest
0 голосов
/ 25 декабря 2018

Итак, я недавно начал изучать ember js, особенно его движок рендеринга glimmer, и пытался понять, как он работает.

Итак, я понимаю, что Glimmer VM - это виртуальная машина, которая имитирует реальный DOM и выполняет функциичтобы обновить его.В то время как vdom поддерживает внутреннее представление состояний DOM, у glimmer VM такого состояния нет, вместо этого он выполняет два набора линейных инструкций - один для первоначального рендеринга шаблона, а второй - для обновления элементов.Основным преимуществом этого подхода является то, что таким образом мы можем полностью обойти узкое место синтаксического анализа / компиляции JS и просто отправить двоичный файл клиенту, который затем выполняется из glimmer vm.Я правильно понял?

1 Ответ

0 голосов
/ 26 декабря 2018

Glimmer не обходит загрузку / синтаксический анализ / компиляцию, если просто изменить язык шаблона с JS или текста на двоичный байт-код, поэтому его загрузка намного меньше и быстрее, а анализ / компиляция выполняется с помощью GlimmerВМ вместо JS ВМ с простой грамматикой, которая действительно быстро анализируется и выполняется, также в будущем виртуальная машина может быть перемещена в WebAssembly, чтобы сделать ее еще быстрее.

Виртуальная машина Glimmer - это просто виртуальная машина, которая выполняетбайт-код, но именно Glimmer обрабатывает состояние, поэтому, когда он хочет визуализировать компонент, он берет этот шаблон компонента и выполняет байт-код шаблона в ВМ.Визуализация шаблонной программы, а также генерация байт-кода программы обновления, и она сохраняется связанной с компонентом, поэтому, когда компонентам требуется повторное рендеринг, в ВМ выполняется только программа обновления.В среде Virtual Dom обновления вызывают функции, которые изменяют виртуальный дом, а затем, мгновенно или когда тянет система рисования (для пакетных обновлений), она будет отличать виртуальный дом от предыдущего и обновлять узлы, которые необходимо обновить.

Виртуальный DOM имеет большой смысл в реакции, поскольку он не использует шаблоны, компоненты JSX переносятся в код JS, который использует реагирующий API для взаимодействия с DOM (отметьте this ).

Angular Ivy (новый движок представления Angular), похоже, похож на Glimmer в том, что он создает некоторый код Ivy вместо полноценного JS, но не создает программу обновления как Glimmer.(Не совсем уверен, что это то, что я получаю из статей Ivy, которые я нашел вокруг.)

Glimmer и Angular делают нечто похожее на Virtual DOM, но на уровне компонентов они контролируют изменения и воспроизводят только те компоненты, которые изменили своиданные.Основное отличие состоит в том, что Glimmer уже знает, что нарисовано, и выполняет байт-код шаблона обновления, сгенерированный предварительно, вместо разборки и полного рендеринга.

...