Javascript如何创建分配免费动画循环以避免垃圾收集器?

前端之家收集整理的这篇文章主要介绍了Javascript如何创建分配免费动画循环以避免垃圾收集器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试构建一个平滑的60fps动画浏览器 JavaScript循环.我注意到,垃圾收集器踢入并将动态帧的变量非零时间添加到动画帧.我开始跟踪我的代码中的分配,然后隔离它自己的循环.我正在使用requestAnimationFrame,发现在一个所谓的“空”循环中,它仍然导致每次迭代的分配并触发垃圾收集器.令人沮丧的是,这似乎也在其他循环机制setInterval和setTimeout中发生.

下面我把一些jsfiddles和截图展示了示例’空循环’.所有样品均为〜5秒钟.

在这一点上,我正在寻找最佳的解决方案来最大限度地减少垃圾收集.从下面的示例来看,requestAnimationFrame在这方面是最糟糕的选择.

requestAnimationFrame

https://jsfiddle.net/kevzettler/e8stfjx9/

var frame = function(){
    window.requestAnimationFrame(frame);
};

window.requestAnimationFrame(frame);

的setInterval

https://jsfiddle.net/kevzettler/p5LbL1am/

var frame = function(){
   //literally nothing
};

window.setInterval(frame,0);

的setTimeout

https://jsfiddle.net/kevzettler/9gcs6gqp/

var frame = function(){
    window.setTimeout(frame,0);
}

window.setTimeout(frame,0);

解决方法

我实际上并不确定,但我似乎记得网络工作者有自己的垃圾回收器,所以GC命中不会影响主线程中的FPS(尽管它仍然会影响更新的发送到主机的能力线)
原文链接:/js/154665.html

猜你在找的JavaScript相关文章