如果禁用角应用程序中的zonejs,是否仍然需要将组件设置为OnPush以提高性能?
发布于 2022-09-22 08:55:48
禁用zoneJS意味着组件与整个应用程序的更改检测隔离。ZoneJS内部与ZoneJS一起工作,以检测何时更新UI。
通过禁用zoneJS,可以禁用所有内部发射器。
因为它是一个非常特殊的用例,您应该自己检查一下:首先,尝试添加公共生命周期挂钩,看看它们是否仍然触发。这些是ngOnInit,ngAfterViewInit等。
在它们里面放一个console.log,如果它触发了,那就意味着应用程序的某些部分仍然会被触发(这很好)。
接下来,尝试使用ngDoCheck:这个生命周期钩子在每次必须更新UI时都会触发。通过将一个console.log放入其中,您将能够看到触发更改检测的次数。如果它对您的口味来说太多了,那么是的,您可能需要将onPush添加到您的组件中。如果不是,那你应该做得很好!
我还建议尝试一下async管道,因为它是最常用的管道之一,在我看来,在每个可观察到的地方添加一个tap(() => this.cdRef.detectChanges())是非常糟糕的。
https://stackoverflow.com/questions/73810359
复制相似问题