Проверяет понимание механизма Change Detection в Angular и умение оптимизировать производительность через стратегию OnPush.
Angular использует механизм change detection, чтобы синхронизировать состояние компонентов с DOM. По умолчанию каждый компонент имеет стратегию Default, при которой Angular проверяет его при каждом цикле обнаружения изменений, инициированном событиями DOM, таймерами, HTTP-запросами или промисами (через Zone.js). Это надёжно, но при большом дереве компонентов становится дорого.
Стратегия OnPush сообщает Angular, что компонент нужно проверять только в определённых случаях:
@Input (сравнение по ссылке, а не по значению);async-pipe, привязанный к Observable;ChangeDetectorRef.markForCheck() или detectChanges();@Component({
selector: 'app-user',
template: '{{ user.name }}',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class UserComponent {
@Input() user!: { name: string };
constructor(private cd: ChangeDetectorRef) {}
// мутация не сработает — нужна новая ссылка
update() {
this.user = { ...this.user, name: 'Bob' };
// либо this.cd.markForCheck();
}
}arr.push(x) используйте this.arr = [...this.arr, x].markForCheck().async-pipe, который сам помечает компонент для проверки.Итог: OnPush стоит применять в крупных приложениях и «глупых» презентационных компонентах, где важна производительность и данные приходят иммутабельно; Default уместен в небольших проектах или там, где мутации неизбежны.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию