这听起来有点抽象,但我真的很好奇到底是什么原因导致了这种行为。
设置:
角9.1.0
所有组件都使用OnPush检测策略。
我有组件(相当重的UI与flex布局),它是在*ngFor中初始化的,每次页面初始化大约10次。此组件具有用于生成布局的单号输入属性。
当我使用:
ngOnChanges(changes: SimpleChanges) {
if (this.id) {
this.initComponent(this.id); // this triggers component to be rendered
}
}渲染大约需要5-7秒。
如果我用:
ngOnChanges(changes: SimpleChanges) {
if (this.itemId) {
setTimeout(() => {
this.initComponent(this.itemId ?? 0);
}, 1);
}
}渲染一切都需要不到1秒的时间。我正在寻找可能导致这种行为的ideas,以便我可以改进代码或了解当前代码中的缺陷。
发布于 2020-04-08 13:17:51
角作为一个单线程应用程序运行。因此,当您尝试呈现UI时,它必须等待Javascript引擎完成其处理以被呈现。
setTimeout()是在本机代码中调度的。因此,从本质上讲,Javascript引擎退出到本机代码,本机代码(setTimeout())呈现UI,然后退出到Javascript引擎,在那里它可以继续处理。
因此,将您的UI代码放在setTimeout()中会产生这个结果。
https://stackoverflow.com/questions/61100908
复制相似问题