为什么在Angular&;中设置超时;显著提高运行时性能?
这听起来有点抽象,但我真的很好奇这种行为的可能原因 设置: 角度9.1.0为什么在Angular&;中设置超时;显著提高运行时性能?,angular,Angular,这听起来有点抽象,但我真的很好奇这种行为的可能原因 设置: 角度9.1.0 所有组件都使用OnPush检测策略 我有一个组件(相当重的UI,带有flex布局),它在一个页面上用*Ng初始化了大约10次。此组件具有单个数字输入属性,可从中生成布局 当我使用: ngOnChanges(changes: SimpleChanges) { if (this.id) { this.initComponent(this.id); // this triggers component to
所有组件都使用OnPush检测策略 我有一个组件(相当重的UI,带有flex布局),它在一个页面上用*Ng初始化了大约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秒的时间。我正在寻找可能导致这种行为的想法,以便改进代码或了解当前代码中的缺陷。Angular作为单线程应用程序运行。因此,当您尝试呈现UI时,它必须等待Javascript引擎完成其呈现处理
setTimeout()
是在本机代码中计划的。所以本质上,Javascript引擎退出到本机代码,本机代码(setTimeout()
)呈现UI,然后退出返回到Javascript引擎,在那里它可以继续处理
因此,将您的UI代码放入
setTimeout()
将产生该结果。Angular作为单线程应用程序运行。因此,当您尝试呈现UI时,它必须等待Javascript引擎完成其呈现处理
setTimeout()
是在本机代码中计划的。所以本质上,Javascript引擎退出到本机代码,本机代码(setTimeout()
)呈现UI,然后退出返回到Javascript引擎,在那里它可以继续处理
因此,将您的UI代码放入
setTimeout()
会产生这样的结果。这很有趣,同时也很奇怪,您能提供一个复制链接吗?可能是您的initComponent依赖于其他代码,需要5-7秒,请提供有关该函数的更多信息。是的,确实如此。我怀疑有什么东西阻塞了主线程,导致这些组件按顺序呈现,而如果我使用setTimeout,它会同时独立地呈现它们。我似乎不明白为什么。我需要花更多的时间来复制这个,我们有一个非常复杂的企业应用程序。也许在github页面上发布或搜索它?它们的响应速度非常快。这很有趣,同时也很奇怪,你能提供一个复制链接吗?可能是你的initComponent依赖于其他代码,需要5-7秒,请提供有关该函数的更多信息。是的,是的。我怀疑有什么东西阻塞了主线程,导致这些组件按顺序呈现,而如果我使用setTimeout,它会同时独立地呈现它们。我似乎不明白为什么。我需要花更多的时间来复制这个,我们有一个非常复杂的企业应用程序。也许在github页面上发布或搜索它?他们反应很快。