У меня есть компонент, который «лениво загружает» некоторые комментарии с интервалом в 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% ниже.
Этот метод еще более плавный (среднее значение fps 45, время простоя 13500 мс):
interval(100).pipe(takeWhile(this.postService.hasPosts()).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}
источник