Javascript firefox和chrome之间的游戏循环不一致

Javascript firefox和chrome之间的游戏循环不一致,javascript,Javascript,这是我为演示拍摄的动画GIF。 仅使用320行代码,结构简单 问题是,当我在Firefox中打开它时,它会严重口吃。 在chrome中,它工作得很好。 我想知道为什么会发生这种情况 起初我认为这与我的代码有关。 因为每个函数中都有许多局部变量。 所以我消除了它们,现在它在铬上工作得很好。 但这种情况在Firefox中仍然存在。 我不知道如何解释devTools的性能概要 Obj Input // contains vars, funcs, Obj Game // conta

这是我为演示拍摄的动画GIF。 仅使用320行代码,结构简单

问题是,当我在Firefox中打开它时,它会严重口吃。 在chrome中,它工作得很好。 我想知道为什么会发生这种情况

起初我认为这与我的代码有关。 因为每个函数中都有许多局部变量。 所以我消除了它们,现在它在铬上工作得很好。 但这种情况在Firefox中仍然存在。 我不知道如何解释devTools的性能概要

Obj Input      // contains vars, funcs,
Obj Game       // contains vars, funcs,
Obj Graphic    // contains vars, funcs,

var RAF = requestAnimationFrame;
func main(){
    //lastTime, now, delta for calculating x, y values
    ...
    Input.update(delta);
    Game.process(delta);
    Graphic.draw();
    ...
    RAF(main);
}
main();
这是我的代码的简化版本

我搜索了如何使用RAF控制FPS,如何使用devTools,但是,我对这种行为一无所知。谁能启发我

firefox/chrome配置文件的图像

Obj Input      // contains vars, funcs,
Obj Game       // contains vars, funcs,
Obj Graphic    // contains vars, funcs,

var RAF = requestAnimationFrame;
func main(){
    //lastTime, now, delta for calculating x, y values
    ...
    Input.update(delta);
    Game.process(delta);
    Graphic.draw();
    ...
    RAF(main);
}
main();
更新:

我已经在firefox、firefox开发版和chrome上进行了测试。只有扩展监视器中的firefox才会导致此问题。我甚至缩小了画布的大小,并确认这与浏览器的性能和代码优化无关

我的猜测是,当firefox浏览器从一个显示器移动到另一个显示器时,它会尝试重新调整如何处理它,如rAF、重新绘图等。这样做时,firefox无法在我的扩展显示器中正确处理它


这确实很有趣,我想更深入地研究一下。但是我可以很清楚地得出结论。

main()的开头和结尾获得时间并发挥作用怎么样?如果您的存储容量超过
1000/屏幕帧率
ms,这是一个性能问题(仅用于测试)@FeMachine您给了我一个奇怪的想法,这让我产生了意想不到的结果。我目前正在使用笔记本电脑和另一个显示器来扩展屏幕。我一直在这个扩展屏幕上测试。当我把firefox窗口移到笔记本电脑屏幕上时,效果非常好。然后我把它移回去,它又结巴了。Chrome不能做到这一点。我现在更困惑了。也许firefox检测不到你显示器的帧速率,每秒刷新30次而不是60:D。关于它的工作原理有一个解释,也许你可以尝试一下帧速率工具来研究一下bit@FeMachine非常感谢。不知怎么的,它开始有意义了。我会寻找相关的话题。感谢您的帮助。:)