Ivy — это новый движок компиляции и рендеринга Angular, полностью заменивший View Engine. Он был разработан с целью упростить архитектуру фреймворка, повысить производительность и улучшить опыт разработки.
В Ivy каждый компонент компилируется в набор низкоуровневых инструкций, которые напрямую управляют DOM. Вместо абстрактных представлений используется процедурный код, вызываемый при изменениях данных.
Пример скомпилированного шаблона:
ɵɵelementStart(0, 'div');
ɵɵtext(1);
ɵɵelementEnd();
Такая модель устраняет необходимость в промежуточных структурах и снижает накладные расходы при рендеринге.
Ivy использует более точечный подход к change detection:
Это особенно заметно в крупных приложениях с глубокой иерархией компонентов.
Ivy поддерживает tree-shaking на уровне компонентов. Если компонент или директива не используются, они полностью исключаются из финального бандла.
Ключевые факторы уменьшения размера:
В результате начальная загрузка приложения ускоряется, особенно в мобильных средах.
Каждый компонент компилируется изолированно. Это означает, что изменение одного компонента не требует перекомпиляции всего приложения.
Преимущества локальности:
Ivy генерирует более точные и читаемые сообщения об ошибках, привязанные к конкретным выражениям шаблона. Ошибки времени выполнения указывают на реальные строки шаблона, а не на абстрактные фабрики.
Дополнительно:
Создание динамических компонентов в Ivy не требует
ComponentFactoryResolver. Достаточно передать сам класс
компонента:
viewContainerRef.createComponent(MyComponent);
Это упрощает код, снижает количество импортов и делает API более интуитивным.
Ivy заложил фундамент для дальнейших возможностей Angular:
Рендерер стал ближе к платформе браузера, что позволяет внедрять новые возможности без радикальных изменений публичного API.
Ivy превратил Angular из тяжёлого фреймворка с большим количеством магии в предсказуемую и прозрачную систему, где каждый компонент является самостоятельной, оптимизируемой единицей.