Angular: рендеринг и компиляция

Incremental DOM vs Virtual DOM

Virtual DOM (React, Vue) создаёт всё дерево заново при каждом повторном рендеринге и сравнивает его с предыдущим.

Incremental DOM (Angular Ivy) — каждый компонент компилируется в набор инструкций, которые создают и обновляют DOM. Цели: хорошая производительность на мобильных, оптимизация размера бандла и потребления памяти.

Как это достигается:

  • движок рендеринга tree-shakable — в бандл попадают только используемые инструкции;
  • движок не потребляет много памяти — Incremental DOM не требует памяти для повторного рендеринга, если изменений в DOM нет (в отличие от Virtual DOM, который каждый раз строит дерево с нуля).

AOT vs JIT

JIT (Just-in-Time)AOT (Ahead-of-Time)
Когда компилируетсяв браузере, во время выполненияна этапе сборки
Каккаждый файл отдельновесь код вместе, HTML/CSS инлайнятся в скрипты
Компилятор в бандленуженне нужен (≈половина размера Angular)
Скорость запускамедленнеебыстрее
ШаблоныHTML-строки компилируются в браузерескомпилированы заранее, компилятор и исходные шаблоны не входят в бандл
Назначениелокальная разработкаproduction-сборки