ฉันมีองค์ประกอบที่ "ขี้เกียจโหลด" ความคิดเห็นบางอย่างในช่วงเวลา 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);
}
ทำให้แอปพลิเคชันของฉันราบรื่น (เฉลี่ย 35 fps, เวลาว่าง 40800ms)
while(this.postService.hasPosts()){
timer(100).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}
มีคำอธิบายใด ๆ ทำไมตัวจับเวลา rxjs ถึงใช้งานได้ดีกว่ามาก?
ฉันทำการวิเคราะห์ runtime ด้วย firefox ในตัวอย่างแรกอัตราเฟรมลดลงถึง 14 fps ในอีกตัวอย่างหนึ่ง 35 fps
แม้เวลาว่างจะลดลง 20%
วิธีนี้ราบรื่นยิ่งขึ้น (เฉลี่ยต่อวินาที 45, ไม่ได้ใช้งานเวลา 13500ms):
interval(100).pipe(takeWhile(this.postService.hasPosts()).subscribe(()=> {
this.posts.push(this.postService.next(10));
});
}