我注意到,当我在YouTube上播放视频时(在Chrome中),我正在使用CreateJS开发的HTML5游戏的运行速度是通常的一半。
本身,在桌面上 - 运行 60fps 没问题。
YouTube视频正在运行? 30fps的<!/ em>的
奇怪的是,我似乎无法在不同的机器上重现这个问题。它可能与不同的图形卡/驱动程序响应 requestAnimationFrame 调用的方式有关吗?
答案 0 :(得分:0)
没有。不同的浏览器选项卡不共享RAF调用。
如果您有2个浏览器标签,每个标签都有一个RAF循环,则焦点的标签将运行其RAF循环,而未关注的标签将停止其RAF。
但是,如果您在单个浏览器选项卡上有多个RAF调用,则所有这些RAF调用将合并为一个与显示刷新同步的执行。
答案 1 :(得分:0)
RequestAnimationFrame不适用于图形卡或驱动程序级别。它是一种特定于浏览器的软件概念,可以要求浏览器调用程序来执行一些渲染任务,这些任务根据浏览器在其处理管道中的位置进行优化,并且比旧版本更高的精度例如setTimeout
。
正如@markE正确指出的那样,当选项卡处于非活动状态时,RAF会暂停,因此在多个选项卡中没有与RAF相关的性能问题。实际上,在非活动标签中暂停基于RAF的动画的能力是引入它的动机之一。
但是,YouTube不使用RAF。据我所知,YouTube视频会继续在后台标签中运行。图形子系统完成了大部分工作,但CPU也参与其中;像素必须从某处引入并馈送到图形系统。在多核CPU上,理论上新的进程可能会使用未充分利用的核心,但最终CPU资源是有限的。它必须做的工作越多,一切就越慢,特别是它可以用于浏览器或运行浏览器选项卡的特定线程的资源越少。所以是的,你会看到这样的放缓并不奇怪。