requestAnimationFrame与setInterval都可以实现循环触发事件,但是setInterval是基于时间的,而requestAnimationFrame是基于帧数的,在我的一次开发弹幕的项目中,在一开始使用了setInterval来切换弹幕的位置,起初并没有什么问题,但是当浏览器切换回后台后,就会出现弹幕积攒过多的原因,因为我随不断的创建新的弹幕进行移动(为了考虑性能,会优先使用已经被废弃的弹幕盒),当浏览器切换到后台后,浏览器本身已经不进行页面渲染了,而我的定时器却在不断的创建新的弹幕以用来发射,当用户将浏览器切换到前台时候,会看到在一段时间内积攒的弹幕堆积到一起,最后发现是因为 浏览器在后台的时候 定时器还是会不断的跑的,但是在当前这种情况下 我可能并不是很希望弹幕系统继续运行下去,我希望知道浏览器当前状态是在前台还是后台,如果是后台的话 则暂停弹幕,然而在微信中并没有看到相关的机制,后来看到了requestAnimationFrame,requestAnimationFrame也是不断的循环执行事件,但是他是按帧执行的,而且有一个好处是 当浏览器切换到后台后,requestAnimationFrame是不会再去执行事件了。这和setInterval有着本质的差异。而requestAnimationFrame之所以在浏览器进入后台不去执行的原因 ,应该是和浏览器进入后台后不去渲染界面有关,因为渲染界面后需要逐帧绘制,当不进行页面的选然后,也就没必要去执行帧操作了,所以requestAnimationFrame也不会去执行了

如果上述推论是正确的,那可以基此判断出setTimeout在浏览器进入后台后依然会运行,就像setInterval一样

关于requestAnimationFrame与setInterval的一点差异的更多相关文章

  1. requestAnimationFrame与setInterval,setTimeout

    自打学习canvas动画以来,都说requestAnimationFrame好,就一直用,也没觉得有什么太过于特殊的地方,直到刚才,在写完前面的"小球碰撞墙壁----干掉误差"之后 ...

  2. python使用cx_Oracle在Linux和Windows下的一点差异

    1. 主要是线程方面的差异. Windows下,把cx_Oracle.connect(connectedId)得到的handle传给定时器线程,主线程和和定时器可以用同一个handle. 但Linux ...

  3. javascript中正则表达式和ruby中的一点差异

    看到一个例子,不过这个例子中正则表达式的格式貌似是错的: Function.prototype.get_name = function(){ return this.name || this.toSt ...

  4. [bug]android monkey命令在Android N和Android O上的一点差异发现

    最近再调试这个统计FPS的代码,发现代码在android N上可以正常运行,但在android O上却运行不了,拼了命的报错,给出的提示就是 ZeroDivisionError: division b ...

  5. 动画requestAnimationFrame

    前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ...

  6. 管理页面的 setTimeout & setInterval

    在管理 setTimeout & setInterval 这两个 APIs 时,笔者通常会在顶级(全局)作用域创建一个叫 timer 的对象,在它下面有两个数组成员 —— {sto, siv} ...

  7. 关于requestAnimationFrame()和cancelAnimationFrame()与定时器之间的比较

    在渲染页面动画的时候,其实也没有必要用定时器(setInterval),其实requestAnimationFrame()和cancelAnimationFrame()也能达到相应的效果,他是HTML ...

  8. requestAnimationFrame小结

    背景 在Web应用中,实现动画效果的方法比较多,Javascript 中可以通过定时器 setTimeout或者setInterval 来实现,css3 可以使用 transition 和 anima ...

  9. 关于linux的一点好奇心(五):进程线程的创建

    一直以来,进程和线程的区别,这种问题一般会被面试官拿来考考面试者,可见这事就不太简单.简单说一点差异是,进程拥有独立的内存资源信息,而线程则共享父进程的资源信息.也就是说线程不拥有内存资源,所以对系统 ...

随机推荐

  1. html 类似雷达扫描效果 及 闪屏效果

    //雷达扫描效果 1 <em id="Radar" class="RadarFast"></em> css: .RadarFast{ p ...

  2. 自定义Win10右键“发送到”菜单

    打开Win10文件资源管理器窗口(打开“这台电脑”或任一文件夹即可),然后在资源管理器窗口的地址栏中输入 shell:sendto ,回车或点击地址栏右侧的“转到”箭头即可打开“SendTo(发送到) ...

  3. Python魔法方法详解

      魔法方法 含义   基本的魔法方法 __new__(cls[, ...]) 1.__new__是在一个对象实例化的时候所调用的第一个方法 2.它的第一个参数是这个类,其他的参数是用来直接传递给__ ...

  4. pom的maven仓库的配置

    这里简单记录一下问题 本人配置了nexus的私人仓库,配置阿里云的远程仓库(http://182.92.29.40/nexus/content/groups/public/)和正规的2个库(http: ...

  5. Liunx网络技术管理及进程管理

    Linux网络技术管理及进程管理(week2_day4)   OSI七层模型和TCP/IP四层模型 OSI七层模型:OSI(Open System Interconnection)开放系统互连参考模型 ...

  6. 湘潭邀请赛+蓝桥国赛总结暨ACM退役总结

    湘潭邀请赛已经过去三个星期,蓝桥也在上个星期结束,今天也是时候写一下总结了,这应该也是我的退役总结了~ --------------------------------湘潭邀请赛----------- ...

  7. 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用

    优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...

  8. 设计模式理解(八)结构型——装饰者模式(记得加上UML图 --- 未完)

    一段时间没写,又忘了,晕...设计模式这种东西一定要经常用. 装饰者模式(Decorator)用于动态地给一个对象增加一些额外的职责,就增加功能来说,他比生成子类更为灵活. 装饰者模式的原则是: 能用 ...

  9. Tomcat &servlet字符集编码问题

    1.字符编码的原由 1.1 request和response的默认编码是? 如果未指定字符编码,则Servlet规范要求使用ISO-8859-1的编码. HTTP消息正文(请求或响应)的字符编码在Co ...

  10. luoguP1919 A*B Problem升级版 ntt

    luoguP1919 A*B Problem升级版 链接 luogu 思路 ntt模板题 代码 #include <bits/stdc++.h> #define ll long long ...