关于requestAnimationFrame与setInterval的一点差别

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

 

若是上述推论是正确的,那能够基此判断出setTimeout在浏览器进入后台后依然会运行,就像setInterval同样微信

相关文章
相关标签/搜索