递归setTimeout()和setInterval()的差异
- 递归 setTimeout() 保证执行之间的延迟相同,例如延迟为100ms。代码将运行,然后在它再次运行之前等待100ms,因此无论代码运行多长时间,间隔都是相同的。
- 使用 setInterval() 的示例有些不同。我们选择的间隔包括执行我们想要运行的代码所花费的时间。假设代码需要40毫秒才能运行 - 然后间隔最终只有60毫秒。
- 当递归使用 setTimeout() 时,每次迭代都可以在运行下一次迭代之前计算不同的延迟。 换句话说,第二个参数的值可以指定在再次运行代码之前等待的不同时间(以毫秒为单位)。
因此,当你的代码有可能比你分配的时间间隔,花费更长时间运行时,最好使用递归的 setTimeout() - 这将使执行之间的时间间隔保持不变,无论代码执行多长时间,你不会得到错误。
----->摘自MDN
https://developer.mozilla.org/zh-CN/docs/learn/JavaScript/异步/超时和间隔
下同
requestAnimationFrame() 与 setInterval() 和 setTimeout()的差异
这是requestAnimationFrame()
function draw() {
// Drawing code goes here
requestAnimationFrame(draw);
}
draw();
这是setInterval()
function draw() {
// Drawing code goes here
}
setInterval(draw, 17);
- 没有为requestAnimationFrame();指定时间间隔;它只是在当前条件下尽可
- 另一方面setInterval()需要指定间隔。我们通过公式1000毫秒/60Hz得出17的最终值,然后将其四舍五入。四舍五入是一个好主意,浏览器可能会尝试运行动画的速度超过60fps,它不会对动画的平滑度有任何影响。
- 60Hz是标准刷新率。