100ms 간격으로 일부 주석을 "지연로드"하는 구성 요소가 있습니다.
setTimeout을 사용하면 실제로 게으 릅니다.
구성 요소
<div *ngFor="let post of posts">
<app-post [post]="post" ></app-post>
</div>
이것은 내 응용 프로그램을 게으르게 만듭니다 (avg fps 14, 유휴 시간 51100ms) :
while(this.postService.hasPosts()){
setTimeout(()=> {
this.posts.push(this.postService.next(10));
},100);
}
이것은 내 응용 프로그램을 부드럽게 만듭니다 (avg fps 35, 유휴 시간 40800ms)
while(this.postService.hasPosts()){
timer(100).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}
왜 rxjs 타이머가 더 잘 작동하는지 설명이 있습니까?
firefox로 런타임 분석을 수행했습니다. 첫 번째 예에서는 프레임 속도가 14fps로 떨어집니다. 다른 예에서는 35fps입니다.
유휴 시간조차도 20 % 더 낮습니다.
이 방법은 훨씬 더 부드럽습니다 (avg fps 45, 유휴 시간 13500ms).
interval(100).pipe(takeWhile(this.postService.hasPosts()).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}