У мене є компонент, який "ледачий завантажує" деякі коментарі, з інтервалом 100 мс.
Коли я використовую setTimeout, він дійсно млявий.
компонент
<div *ngFor="let post of posts">
<app-post [post]="post" ></app-post>
</div>
Це робить моє додаток малим (середній кадр в секунду 14, час очікування 51100 мс):
while(this.postService.hasPosts()){
setTimeout(()=> {
this.posts.push(this.postService.next(10));
},100);
}
Це робить моє додаток гладким (середній кадр в секунду 35, час очікування 40800 мс)
while(this.postService.hasPosts()){
timer(100).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}
Чи є пояснення, чому таймер rxjs працює так набагато краще?
Я робив аналіз часу з Firefox. У першому прикладі частота кадрів падає до 14 кадрів в секунду. В іншому прикладі - 35 кадрів в секунду.
Навіть час простою на 20% нижчий.
Цей спосіб ще більш плавний (середній кадр в секунду 45, час очікування 13500 мс):
interval(100).pipe(takeWhile(this.postService.hasPosts()).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}