写点什么

setInterval、setTimeout 和 requestAnimationFrame

作者:源字节1号
  • 2022 年 6 月 28 日
  • 本文字数:588 字

    阅读完需:约 2 分钟

setInterval、setTimeout和requestAnimationFrame

setTimeout setTimeout延时执行某一段代码,但setTimeout由于EventLoop的存在,并不百分百是准时的,一个setTimeout可能会表示如下的形式:

// 延时1s之后,打印hello,worldsetTimeout(() => {  console.log('hello,world');}, 1000)
复制代码

setInterval: setInterval在指定的时间内,重复执行一段代码,与setTimeout类似,它也不是准时的,并且有时候及其不推荐使用setInterval定时器,因为它与某些耗时的代码配合使用的话,会存在执行积累的问题,它会等耗时操作结束后,一起一个或者多个执行定时器,存在性能问题。一个setInterval可能会表示如下的形式:

setInterval(() => {  console.log('hello,world');}, 1000)
复制代码

requestAnimationFrame: 翻译过来就是请求动画帧,它是 html5 专门用来设计请求动画的 API,它与setTimeout相比有如下优势:

  1. 根据不同屏幕的刷新频率,自动调整执行回调函数的时机。

  2. 当窗口处于未激活状态时,requestAnimationFrame会停止执行,而setTimeout不会

  3. 自带函数节流功能

var progress = 0;var timer = null;function render() {  progress += 1;  if (progress <= 100) {    console.log(progress);    timer = window.requestAnimationFrame(render);  } else {    cancelAnimationFrame(timer);  }}//第一帧渲染window.requestAnimationFrame(render);
复制代码

如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/171.html

用户头像

源字节1号

关注

一个着迷于技术又喜欢不断折腾的技术活跃者 2022.03.09 加入

一个着迷于技术又喜欢不断折腾的技术活跃者。喜欢并热爱编程,执着于努力之后所带来的美好生活!

评论

发布
暂无评论
setInterval、setTimeout和requestAnimationFrame_软件开发_源字节1号_InfoQ写作社区