【问题标题】:Angular NgZone.runOutsideAngular and OnPush change detection strategyAngular NgZone.runOutsideAngular 和 OnPush 变化检测策略
【发布时间】:2020-04-01 11:17:55
【问题描述】:
我正在尝试优化 Angular 应用程序中代码的性能。
我知道我可以runOutsideAngular 一些代码,以免对每个代码运行或事件造成更改检测。
但是,当我使用OnPush更改检测策略时,我是否需要使用runOutsideAngular? (对于听众等)
【问题讨论】:
标签:
angular
angular2-changedetection
【解决方案1】:
我想我现在有答案了。
在我看来,这取决于应用的外观。
-
如果它有 许多未优化的 组件,并且 异步操作 会触发很多次 或者它是一个事件监听器,那么它必须在runOutsideAngular内
-
然而,如果一个应用程序大部分是用OnPush策略的组件构建的,或者只是AppComponent使用OnPush(因为整个树将使用OnPush策略定义它一个顶级组件不可逆转地为整个应用程序定义了这个策略)然后你可以省略使用runOutsideAngular,因为更改检测的触发器不会影响任何东西
另外,我认为完全 OnPush 优化的应用可以选择禁用 Zone 中的所有事件补丁,因此不需要 runOutsideAngular,因为所有异步事件都没有触发 NgZone 的意义。