当我在开发模式下使用 @Output 事件发射器时,我的 Angular 4 应用程序性能下降。我尝试尽可能简化我的设置,以便可以理解问题。
一个父组件由多个子组件组成。每个孩子都可以通过@Output 事件发射器发射一个事件。
父组件.ts
export class ParentComponent {
public onSomething() {}
}
父模板.html
<child *ngFor="let child of children"
(onSomething)="onSomething($event)"></child>
child.component.ts
export class ChildComponent {
@Output() onSomething = new EventEmitter(); // type intentionally omitted
}
如果我导航到父组件,对于上面的示例,Chrome 处于渲染阶段(Chrome 开发人员工具中的时间线选项卡)大约 1500 毫秒。如果我删除(onSomething)="onSomething($event)"
,Chrome 将处于渲染阶段约 600 毫秒。如果我在父模板中使用父类中的相应方法添加多个 onSomethings,那么每次添加绑定都会变得更糟,例如 5 个绑定会导致大约 4000 毫秒的渲染时间。
我的设置主要由这些组件组成(我很乐意提供更多详细信息,但由于我不确定要包括哪些内容,所以我尽量减少):
- 角 4 (4.0.0)
- 网络包 2.3.2
- 网络包开发服务器:2.4.2
我的问题是:
- 如何避免这么长的渲染时间?
- 为什么它只发生在开发模式下?
工作现场示例:
在https://github.com/mircowidmer/angular2-webpack-starter/commit/ea6511356b13b833f14d455186ec362d7a90c638上提交了一个工作示例,并且可以轻松复制。