【发布时间】:2017-02-09 22:29:59
【问题描述】:
如何在使用 ngFor 多次渲染模板时提高性能?我有一种情况,我需要根据计数显示相同的模板。我正在使用 *ngFor 执行此操作。模板加载正确但我担心性能。因为我需要重复显示几千次相同的内容,然后模板加载后性能会变慢。我在这里做了一个 plunker 演示http://plnkr.co/edit/qTj4SVRnFD6N15PZ1GWC?p=preview。请增加formarray中formgroups的数量,相差1000,那么系统会变慢或崩溃。 这就是我创建表单数组的方式,
for(var i=0;i<100;i++){
let dummyFormGroup=this.fb.group({
'name':[''],
'place':['']
})
this.dummyFormArray.push(dummyFormGroup);
}
我像这样使用 ngFor 在 formarray 中渲染控件
<div *ngFor="let formgroup of dummyFormArray.controls" style="display:flex;flex-direction:row">
<p>
<label>Name:</label>
<input type="text" [formControl]="formgroup.controls['name']" />
</p>
<p>
<label>Place:</label>
<input type="text" [formControl]="formgroup.controls['place']" />
</p>
有人可以建议我在加载模板后提高性能的方法吗?因为如果模板需要渲染数千条记录,我可以等待模板加载。但是一旦模板准备好,我希望系统在这种情况下使用 *ngFor 快速。有人请帮我解决这个问题。 谢谢!
【问题讨论】:
-
你能解释一下你所说的慢是什么意思吗?是后期渲染还是预渲染?
-
Post 渲染器后速度很慢
-
当模板准备好后,在输入框中编辑文本显示缓慢。这是我的代码逻辑有问题吗?我的意思是 *ngFor 在加载模板后是否在后台运行任何事件?
-
@abhilashreddy 关于文本的缓慢输入,这几乎肯定是由于 Angular 的更改检测。每次更改输入时,默认情况下,Angular 都会检查每个组件中的更改。即使它可能无法完全解决这个问题,请尝试将所有组件的更改检测策略更改为
OnPush -
@abhilashreddy plnkr.co/edit/FvDEowTn0etWlU1ZLaog?p=preview
标签: angular