Что такое Zone.js и что означает zoneless-режим в Angular?
Change Detection
Zone.js — библиотека, которая перехватывает асинхронные операции браузера (события, таймеры, промисы) и сообщает Angular, что данные могли измениться и нужно запустить проверку изменений.
Как это работает
Zone.js подменяет setTimeout, addEventListener, Promise и другие API. После каждого завершённого асинхронного колбэка зона уведомляет Angular, и тот проходит по дереву компонентов и обновляет шаблоны.
Минусы
- Лишние проверки: срабатывает на любое событие, даже если данные не менялись.
- Размер библиотеки и нюансы с нативными async/await и сторонним кодом.
- Сложнее отладка стека вызовов.
Zoneless
В современных версиях Angular можно работать без Zone.js. Проверку запускают явные сигналы об изменениях: изменение signal, markForCheck, события шаблона, async pipe.
bootstrapApplication(AppComponent, {
providers: [provideZonelessChangeDetection()],
});Для этого код должен опираться на сигналы и OnPush, а не на изменение обычных полей.
Коротко для собеседования
Zone.js сообщает Angular о любой асинхронности и запускает проверку. Zoneless заменяет это явными сигналами и ускоряет приложение.