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