Change Detection Strategy
Функциональность
The strategy that the default change detector uses to detect changes. When set, takes effect the next time change detection is triggered.
Как оно работает

Почему здесь перфоманс важен
Чем лучше cdr понимает какие части приложения нужно обновить, тем меньше самого обновления происходит
Примеры плохого кода
ChangeDetectionStrategy.Default
function dumbEqualityCheck(obj: any) {
return JSON.stringify(obj) === JSON.stringify(this.otherObj)
}
NgIterableDiffer
ngDoCheck
Примеры хорошего кода
ChangeDetectionStrategy.OnPush
Можем ли мы писать проект без этого
Нет, так как это основная и важнейшая фича ангуляра, благодаря которой он показывает последние данные для пользователя
Подводные камни
В стандартном понимании cdr работает часто и даже чаще чем можно себе представить (а все из-за zone.js), поэтому ангуляр перф по факту зависит от сторонней либы
Что влияет на перформанс в этой фиче?
Размер компонентов и количество параметров которые надо проверять при cdr. Так как это синхронная операция, то чем жестче и дольше проверка, тем хуже влияние
Как можно избавиться от негативного влияния на перформанс
Самое очевидное - вызывать только тогда, когда нам это надо (zoneless)
Уменьшать количество вызовов благодаря OnPush стратегии
Чего не хватает в базовой функциональности
Не хватает планировщика cdr чтобы знать когда его лучше запускать, к примеру по окончании микротасковой очереди или же на idle браузера.
Last updated