我有一个组件显示一个包含4行的简单表 . 然而,当它加载时的性能很糟糕 - 我得到0.5秒的延迟 . 有关它的几个事实:
-
使用空表渲染组件,然后约0.5秒,然后使用实际数据重新渲染组件 . 在0.5秒期间没有任何事情发生(没有CPU,渲染等 - 至少根据Chrome分析器)
-
之后0.5秒钟,callstack开始计时器被激活..
-
数据是从服务加载的,不涉及网络调用 - 我只想显示应用程序中先前流程的数据,以确认用户
-
我尝试在组件构造函数,字段初始值设定项以及ngOnInit中加载数据 - 同样的事情发生了
-
我在应用程序的各处都使用OnPush变化检测策略,即使我删除了OnPush - 模式相同,只是时间是0.3秒而不是0.5秒
基于上面我假设首先组件被渲染,然后在0.5之后,第二个更改检测周期触发并且组件通过更新重新呈现 .
最大的问题是:为什么Angular需要重新渲染而不是首先正确渲染组件?如果我在构造函数中获取数据 - 不应该初始更改检测已经将其提取出来吗?
@Component({
//irrelevant part
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AbcScanConfirmationComponent {
document: Document = this.clientLastScanDataService.getDataForCurrentClient();
client: Client = this.clientContextService.currentClient;
constructor(private clientContextService: ClientContextService,
private clientLastScanDataService: ClientLastScanDataService) {
}
}