首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么setTimeout在角&显着地提高运行时性能?

为什么setTimeout在角&显着地提高运行时性能?
EN

Stack Overflow用户
提问于 2020-04-08 12:40:48
回答 1查看 271关注 0票数 0

这听起来有点抽象,但我真的很好奇到底是什么原因导致了这种行为。

设置:

角9.1.0

所有组件都使用OnPush检测策略。

我有组件(相当重的UI与flex布局),它是在*ngFor中初始化的,每次页面初始化大约10次。此组件具有用于生成布局的单号输入属性。

当我使用:

代码语言:javascript
运行
复制
ngOnChanges(changes: SimpleChanges) {
   if (this.id) {
      this.initComponent(this.id); // this triggers component to be rendered
   }
}

渲染大约需要5-7秒。

如果我用:

代码语言:javascript
运行
复制
ngOnChanges(changes: SimpleChanges) {
   if (this.itemId) {
          setTimeout(() => {
           this.initComponent(this.itemId ?? 0);
    }, 1);
  }
}

渲染一切都需要不到1秒的时间。我正在寻找可能导致这种行为的ideas,以便我可以改进代码或了解当前代码中的缺陷。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 13:17:51

角作为一个单线程应用程序运行。因此,当您尝试呈现UI时,它必须等待Javascript引擎完成其处理以被呈现。

setTimeout()是在本机代码中调度的。因此,从本质上讲,Javascript引擎退出到本机代码,本机代码(setTimeout())呈现UI,然后退出到Javascript引擎,在那里它可以继续处理。

因此,将您的UI代码放在setTimeout()中会产生这个结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61100908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档