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

相關問題