17

我编写了一个小引擎,在 Canvas2D 中使用 javascript 显示 5 个精灵。一切正常并且完全优化。

FPS 在 30 到 60 之间波动 - 但有趣的是,当 google javascript 控制台打开时,它以恒定的 60 fps 显示!

还有其他人经历过这种情况吗?

注意我正在使用 requestAnimationFrame

编辑:

示例:http: //jsfiddle.net/jrPNy/1

玩弄“粒子”数,这样你的 fps 就在 40-50 左右。比打开控制台,它上升到 60 fps。(铬 21.0.1180.83)

4

3 回答 3

7

正如问题作者在评论中所说,这与可见的画布区域有关。打开控制台会降低视口的高度,这在正常尺寸的显示器上意味着要渲染的内容更少。60 FPS 是显示刷新率给出的软限制;做比这更多的帧没有意义,因为在普通显示器上每秒显示超过 60 帧是不可能的。

我在我的机器上测试了这个,降低了 CPU 速度,这样我就不会总是得到 60FPS。在提供的 Fiddle 示例中,我通常有大约 24FPS。打开控制台将可见画布缩小到其原始大小的 60% 左右,FPS 平均增加到 30。调整控制台的大小会相应地影响 FPS:只有 10% 的画布可见,FPS 在 42 左右摆动,而在一个非常小的控制台和整个画布可见的情况下,FPS 略低于原始值,达到 23。无论控制台的状态如何,CPU 速度都将 FPS 保持在恒定的 60。

现在,鉴于生成屏幕的 JavaScript 仍在运行,无论画布有多少可见,影响所需处理能力的是画布的实际渲染,以及将画布图像合成到其余部分的方式HTML,在浏览器窗口上,最后到屏幕上。越来越多的工作转移到 GPU 上,所以当合成过程的每个阶段都在 OpenGL 中完成时,FPS 应该总是最大化。

于 2012-08-26T02:17:50.417 回答
1

我在我的 macbook 上使用 chrome 也经历了同样的事情。似乎 osx 坞站导致帧速率变慢,当您打开控制台时,视口会移离坞站足够远,以使帧速率回到 60fps。如果您将窗口从扩展坞移开,则帧速率会上升。如果您自动隐藏扩展坞,您可以在不打开控制台的情况下以 60fps 全屏显示。

于 2014-09-10T14:45:06.657 回答
-1

Google chrome 使用 vsync 意味着它将 FPS 限制为您的屏幕 FPS 限制,大多数屏幕为 60 FPS,因此您的 google 会尽可能匹配,但不会超过它。可能有一个删除 vsync 的程序,但我知道 Nvidia 驱动程序可以控制它,但你需要 GTX 610 或 hight 才能做到这一点

于 2013-05-06T19:34:55.863 回答