假设一个web页面为60fps(fps意为frame per second),这意为着这个页面每秒钟能重新渲染60次,60帧/1000ms换算过来约为16.6ms/帧。
requestAnimationFrame的意义正在于此,此时你使用requestAnimationFrame等价于
setTimeout(()=>{
//.....
},16.6)
看见了吗,这家伙是个异步操作,它接收一个函数作为参数,并延时执行它,至于延后多少,这个函数已经根据页面的fps帮你计算好了,每帧执行一次函数,所以不会出现掉帧。
这和setTimeout的递归调用是一个意思。