【发布时间】:2015-02-06 15:59:53
【问题描述】:
我目前正在开发一个从头开始用纯 JavaScript 编写的小型画布游戏。
游戏涉及 2d 光照算法 similar to this one,但有一个光源和 25 个多边形,这使得每帧大约 30,000 次计算。
我的帧率在 Safari 中非常好,在 Chrome 中是 meh,而在 Firefox 中无法播放。但是,如果我在玩游戏时打开 Chrome 开发者控制台,则帧速率与 Safari 相同。
这可能是什么原因?
在 cmets 提出窗口大小可能会影响帧率后,我发现窗口越小,游戏运行越流畅,但仅在 chrome 中。在屏幕上绘制的数量或游戏使用的任何计算完全不取决于屏幕尺寸。
我纯粹用肉眼测量帧率差异,你可以在这些 gif 中看到效果:
糟糕,大窗口:
好,小窗口:
游戏在浏览器中的运行比在这些 gif 中显示的要流畅得多,但效果仍然很明显。
我可以在我发布的链接中的第一个示例中获得相同的效果。是只有我还是其他人有同样的效果?
更奇怪...当我滚动主页时,我在其他几个网站上也得到了同样的效果,比如 Facebook。窗口越大,滚动越不稳定。这是 Chrome 特有的东西吗,有人得到类似的结果吗?
【问题讨论】:
-
非常酷,但是您的问题对细节有点轻描淡写。你是如何测量帧速率的?使用和不使用开发工具的帧速率差异有多大?你能展示你的真实用例吗?您是否在链接到的源中看到相同的行为?等等……
-
如果调出控制台更改了屏幕上绘制的图像的大小或剪辑,则您减少了每帧需要完成的工作量。
-
刚刚查看了您链接到的页面。(使用 i7 3537u)我得到所有演示的 60fps,但有 2 个例外。最后一个,有 2 个光源(我得到大约 42 fps)和第一个,我得到 50 到 56 fps 之间。您的 GIF 的大小非常大 - 第二个似乎有大约 800x500 的动态区域。绘制@ 32 位等于 1,6000,000 字节。这太大了,无法与浏览器正在执行的其他操作一起放入缓存中 - 预计缓存未命中会对性能产生影响是合理的。 fps显示:developer.chrome.com/devtools/docs/rendering-settings
-
很高兴。 :) 我不确定是 Firefox 还是 Safari,但 Chrome 有一个内置的分析器,因此可以让您准确地看到在您的应用程序中花费的时间。如果您使用 Ctrl-Shift-I 打开 JS 工具,然后打开
Profiles选项卡,则可以选择“收集 JavaScript CPU 配置文件”。在开始分析并与页面交互一段时间后,点击停止按钮并查看结果。也许(希望)在其中一个热点中有所收获。不幸的是,并非所有浏览器都是平等的。 :( 你可能不得不接受某些方面的糟糕表现.. -
@enhzflep 谢谢。在我注意到控制台启动时性能的变化之前,我对游戏进行了分析并尽可能优化它。 Safari 显示最佳帧速率,但所有声音都有延迟,而 Chrome 和 Firefox 听起来不错,但帧速率要低得多。哦,好吧,HTML5,要习惯它。 :) 再次感谢您的帮助。
标签: javascript html performance google-chrome google-chrome-devtools