首页 > 其他分享 >requestAnimationFrame比起setTimeout、setInterval的优势

requestAnimationFrame比起setTimeout、setInterval的优势

时间:2023-10-26 15:55:24浏览次数:24  
标签:动画 浏览器 setInterval 间隔 requestAnimationFrame setTimeout

1. requestAnimationFrame会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率;

setTimeout、setInterval它们的内在运行机制决定了 时间间隔参数 实际上只是指定了把动画代码添加到 浏览器UI线程队列 中以等待执行的时间。如果队列前面已经加入了其它任务,那动画代码就要等前面的 任务完成后 再执行,并且如果时间间隔过短(小于16.7ms)会造成丢帧,所以就会导致动画可能不会按照预设的去执行,降低用户体验。

2. 在隐藏或不可见的元素中,将不会进行重新重绘或回流;

3. requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节省了CPU开销

 

总结:
1、requestAnimationFrame是浏览器的api,它的执行时间间隔是浏览器刷屏的时间间隔,所以不能设置执行时间间隔

2、setTimeout和setInterval能够设置执行时间间隔,但是它的执行任务是被放在浏览器线程的任务队列中等待执行的,所以可能会因为丢帧情况而导致动画卡顿效果

3、requestAnimationFrame在浏览器非激活状态下,动画会暂停,从而节省了CPU开销和浏览器内存消耗

4、隐藏或者不可见的dom ,是不会进行重绘和回流的

标签:动画,浏览器,setInterval,间隔,requestAnimationFrame,setTimeout
From: https://www.cnblogs.com/zha-hdlxdl/p/17789588.html

相关文章

  • [转]setTimeout 和 setInterval 的定时时间深入研究
    原文地址:setTimeout和setInterval的定时时间深入研究-知乎setInterval() -间隔指定的毫秒数不停地执行指定的代码(一直执行)。setTimeout() -在指定的毫秒数后执行指定代码(只执行一次)。使用setInterVal:functiondoStuff(){//此处为需要执行一段时间T......
  • Javascript中window.setInterval和window.setTimeout的区别
    在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的。这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。我们常用的使用场景是:代码如下:window.setTi......
  • setInterval定时器
    <scriptlang="ts"setup>import{ref,onMounted,onUnmounted}from"vue";lettimer=<any>ref(null);onMounted(()=>{//设置每隔5秒刷新一次timer.value=setInterval(()=>{//这里引用你想调用的方法},5000);});//在组件......
  • setInterval和setTimeout的区别
    在制作网页动态效果时,一定会遇到某些需求,要求某段程序等待多时时间后再开始执行,就像在我们的生活中一样,待会儿再开始做一件事。在JavaScript中主要通过定时器实现此类需求,本文将对定时器做一个概括,正对setTimeout()做一个详细用法总结。一.setInterval与setTimeout的区别setInterva......
  • zone.js由入门到放弃之三——zone.js 源码分析【setTimeout篇】
    Delegate是个好东西,看看孙啸达同学对ZoneDelegate的介绍吧,这是他关于zone.js系列文章的第三篇~zone.js系列往期文章zone.js由入门到放弃之一——通过一场游戏认识zone.jszone.js由入门到放弃之二——zone.jsAPI大练兵zone.js源码分析接下来的全是干货,从头到尾,一干到底一点前置:Zon......
  • for循环中使用setTimeout得到的结果
    for(varindex=0;index<5;index++){setTimeout(()=>{console.log(index)},1000)}//输出5个5for(letindex=0;index<5;index++){setTimeout(()=>{......
  • [学习笔记] setInterval中的函数不需要带括号
    setInterval使用格式:setInterval(函数,间隔时间)意为每隔一段设定的间隔时间(单位为ms)就执行一次函数。需要注意的是,里面的函数不需要带括号,否则无法正常执行。如下:正确写法:setInterval(fn,1000)错误写法:setInterval(fn(),1000)......
  • 为什么 setTimeout 有最小时延 4ms ?为什么是4
     写的超级棒,是我要找的答案,转载原文链接:掘金https://zhuanlan.zhihu.com/p/639441280正文在前端技术圈子里面,对于setTimeout常常有一句结论,“setTimeout的最小设置延迟是4ms”。按照“某乎”的方式,在回答一个问题之前得“先看是不是”,“再看对不对或为什么”。我......
  • 定时器setInterval
      ......
  • 定时器之setTimeout
      ......