1

我注意到,当我在YouTube上播放视频时(在Chrome中),我用CreateJS开发的HTML5游戏的运行速度只有它的平均帧率的一半。是否在浏览器标签页/窗口之间共享requestAnimationFrame()调用?

本身在桌面上 - 运行时没有问题60fps

YouTube视频在运行吗? 30fps!

奇怪的是,我似乎无法在不同的机器上重现问题。它可能与不同的图形卡/驱动程序响应requestAnimationFrame调用的方式有关吗?

+0

你为什么对此感到惊讶?这是一台带有一个CPU的计算机。它一次只能做很多事情。 – 2014-09-23 02:05:45

+0

这就好像在说“如果我同时运行程序B,我的操作系统运行程序A的速度会降低50%”。我们生活在现代的多线程CPU周期中,多核心。所以不,我不认为皇家空军一次要求它做太多:P – bigp 2014-09-23 10:44:55

+0

我甚至不知道“多线程CPU周期”是什么意思。多线程意味着机器拥有无限资源?如果机器负载很重,其他所有部件都相同,程序确实会运行得更慢。 – 2014-09-23 12:41:02

回答

0

不。不同浏览器选项卡不共享RAF呼叫。

如果您有两个浏览器选项卡,每个选项卡都带有RAF循环,则选中的选项卡将运行其RAF循环,而未聚焦的选项卡将停止其RAF。

但是,如果您在单个浏览器选项卡上有多个RAF调用,则所有这些RAF调用将被合并到与显示刷新同步的单个执行中。

+0

如果选项卡位于单独的窗口(并排)中,该怎么办?他们都会以全帧率运行吗? – bigp 2014-09-23 17:37:52

+0

如果选项卡位于浏览器的不同实例中,则动画将继续。 – markE 2014-09-23 18:02:54

+0

好的。非常感谢RAF的见解。不幸的是,我仍然不明白我单独运行的两个标签如何导致HTML5游戏中的帧率下降。我想我会删除这个问题,并在另一个问题上重述它。 – bigp 2014-09-23 19:18:20

0

RequestAnimationFrame不适用于图形卡或驱动程序级别。这是一个浏览器特定的软件概念,浏览器可以被要求调用程序在某些时候执行一些渲染任务,这些渲染任务是根据浏览器在其处理流程中的位置进行优化的,并且比以前的替代方案更高,例如setTimeout

正如@markE正确指出的,当选项卡处于非活动状态时,RAF会暂停,因此不存在与在多个选项卡中进行的RAF相关的性能问题。事实上,在不活动标签中暂停基于RAF的动画的能力是引入它的动机之一。

但是,YouTube不使用RAF。据我所知,YouTube视频继续在后台标签中运行。图形子系统完成了大部分工作,但CPU也涉及到了这一点。像素必须从某个地方引入并馈送到图形系统。在多核CPU上,理论上新的进程可能会使用未充分利用的内核,但在一天结束时,CPU资源是有限的。需要做的工作越多,所有事情越慢,特别是可以投入浏览器或运行浏览器选项卡的特定线程的资源越少。所以,是的,你会看到这样的放缓并不奇怪。

+0

很好的答案!当选项卡未激活时是否可以启用RAF? – 2016-01-21 15:13:58

+1

不是我所知,这是一个浏览器实现问题。 – 2016-01-21 15:22:51

相关问题