Я пытаюсь измерить различия в производительности в стратегиях обнаружения изменений.
Я добавил профилировщик angular и проверил его с помощью Default, а затем добавил onPush к большинству наших компонентов, и вот результаты: (режим разработки)
По умолчанию: {msPerTick: 25 + -, numTicks: 18 + -} onPush: {msPerTick: 2 + -, numTicks 220 + -}
как видите, msPerTick значительно уменьшился, но количество циклов в 10 раз больше. чем больше компонентов я изменяю на onPush, мс уменьшается, а numTicks увеличивается.
Я хочу знать, нормально ли это, а если нет, что может к этому привести?
Дополнительные сведения: angular 7, я использую модули отложенной загрузки (с маршрутизацией). app.component - это стратегия по умолчанию. Я проверяю это на самом большом модуле. big.module имеет компонент big.home (по умолчанию) с дочерними компонентами (onPush)
OnPush
не удаляет компонент из списка рендеринга дерева Angular, он просто не обновляет его каждый раз, когда происходит изменение. Вызов API каждые пять секунд запускает визуализацию Angular для уведомления всех этих компонентов. Используя OnPush и вставляяngZone
в компонент, вы можете использовать функциюngZone.runoutsideangular(...)
, чтобы фактически отсоединить компонент от списка компонентов дерева angular, и таким образом вы полностью контролируете, как и когда обновлять компонент. Следовательно, производительность должна возрасти еще больше. - person Jacopo Sciampi   schedule 29.01.2020