我已经使用不可变数据进行OnPush更改检测。我想知道我可以通过使用ngZone.runOutsideAngular进行更改检测吗?我在这里只是寻找一些指导方针。
答案 0 :(得分:6)
它们并不特别相关。 OnPush
控制对每个组件级别的更改检测,而ngZone
“排序”触发更改整个应用程序的检测。
Angular使用区域,特别是NgZone
,以便在没有任何更多任务时得到通知。在区域中安排的任务将在此区域中执行。因此,setTimeout
之类的所有异步任务都在NgZone
内执行。 ngZone.runOutsideAngular
允许您在ngZone
之外安排任务,这意味着一旦完成,Angular将不会得到通知,也不会进行更改检测。
如果你有一些反复执行的异步任务,每秒执行多次(如mousemove事件),那么你可以利用ngZone.runOutsideAngular
来避免触发每个事件的变化检测。然后,您可以每秒安排一次手动更改检测。除此之外,我无法想到它如何帮助您优化应用程序。