Angular NgZone.runOutsideAngular 和 OnPush 变化检测策略

Ser*_*gey 5 angular2-changedetection angular

我正在尝试优化 angular 应用程序中代码的性能。

我知道我可以runOutsideAngular编写一些代码,以免在每个代码运行或事件上引起更改检测。

但是,我runOutsideAngular在使用OnPush变更检测策略时是否需要使用?(对于听众等)

Ser*_*gey 1

我想我现在有了答案。

在我看来,这取决于应用程序的外观。

  • 如果它有很多未优化的组件,并且异步操作触发很多次,或者它是一个事件侦听器,那么它必须在runOutsideAngular

  • 但是,如果应用程序主要是使用具有OnPush策略的组件构建的,或者只是AppComponent使用OnPush(因为整个树将使用OnPush在顶级组件上定义的策略,不可逆地为整个应用程序定义此策略),那么您可以省略使用作为runOutsideAngular更改的触发器检测不会影响任何事情

另外,我认为完全优化的应用程序有一个选项OnPush可以禁用区域中的所有事件补丁,因此不需要,runOutsideAngular因为所有异步事件都没有触发 NgZone 的点。