浏览器工作原理与实践--任务调度:有了setTimeOut,为什么还要使用rAF

本文详细探讨了JavaScript中requestAnimationFrame(rAF)与setTimeout的区别,通过讲解渲染进程的任务调度系统和Chromium的优化策略,解释了为何推荐使用rAF。文章介绍了从单消息队列的队头阻塞问题,到Chromium如何通过引入多优先级队列、动态调度策略和权重机制来提升动画性能的过程。
摘要由CSDN通过智能技术生成

我们都知道,要想利用JavaScript实现高性能的动画,那就得使用requestAnimationFrame这个API,我们简称rAF,那么为什么都推荐使用rAF而不是setTimeOut呢?

要解释清楚这个问题,就要从渲染进程的任务调度系统讲起,理解了渲染进程任务调度系统,你自然就明白了rAF和setTimeOut的区别。其次,如果你理解任务调度系统,那么你就能将渲染流水线和浏览器系统架构等知识串起来,理解了这些概念也有助于你理解Performance标签是如何工作的。

要想了解最新Chrome的任务调度系统是怎么工作的,我们得先来回顾下之前介绍的消息循环系统,我们知道了渲染进程内部的大多数任务都是在主线程上执行的,诸如JavaScript执行、DOM、CSS、计算布局、V8的垃圾回收等任务。要让这些任务能够在主线程上有条不紊地运行,就需要引入消息队列。

在前面的《16 | WebAPI:setTimeout是如何实现的?》这篇文章中,我们还介绍了,主线程维护了一个普通的消息队列和一个延迟消息队列,调度模块会按照规则依次取出这两个消息队列中的任务,并在主线程上执行。为了下文讲述方便,在这里我把普通的消息队列和延迟队列都当成一个消息队列。

新的任务都是被放进消息队列中去的,然后主线程再依次从消息队列中取出这些任务来顺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echoecho_tongtong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值