【发布时间】:2020-06-17 08:36:54
【问题描述】:
我有一个组件,它以 100 毫秒的间隔“延迟加载”一些 cmets。
当我使用 setTimeout 时,它真的很滞后。
组件
<div *ngFor="let post of posts">
<app-post [post]="post" ></app-post>
</div>
这使我的应用程序滞后(平均 fps 14,空闲时间 51100 毫秒):
while(this.postService.hasPosts()){
setTimeout(()=> {
this.posts.push(this.postService.next(10));
},100);
}
这使我的应用程序流畅(平均 fps 35,空闲时间 40800 毫秒)
while(this.postService.hasPosts()){
timer(100).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}
有什么解释,为什么 rxjs 计时器工作得更好?
我用 Firefox 进行了运行时分析。 在第一个示例中,帧速率降至 14 fps 在另一个示例中,35 fps。
甚至空闲时间也减少了 20%。
这种方法更流畅(平均 fps 45,空闲时间 13500ms):
interval(100).pipe(takeWhile(this.postService.hasPosts()).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}
【问题讨论】:
标签: javascript angular typescript rxjs