递归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是标准刷新率。
posted @ 2020-09-13 23:31  梦娜丽莎  阅读(663)  评论(0编辑  收藏  举报