2015-04-01 34 views
0

我讀this articlejavascript優化,有以下一段有:什麼渲染JavaScript的優化背景下架

當視覺上的變化是在你想在正確的時間做你的工作 屏幕發生對於瀏覽器來說,這正好在 框架的開頭。確保您的JavaScript將在 幀開始處運行的唯一方法是使用requestAnimationFrame。

而且這樣的:

框架或樣品可以使用的setTimeout或setInterval的做視覺 變化如動畫,但這個問題是 回調會在某個時候在框架上運行,可能就在 的末尾,而且這通常會導致我們錯過一幀,導致畫面不對齊, 。

我在想這是什麼框架?它是指瀏覽器或設備以60 fps間隔放置的圖片嗎?如果是這樣,那麼callback run at some point in the frame如何在通道中說明?

回答

1

是的,這裏的框架是屏幕的更新週期。

屏幕不是一次全部更新,而是在更新週期內從頂部更新到底部。在CRT監視器中,屏幕上實際發出的光束點亮了熒光粉,在液晶屏幕上,它只是像素,可以用新數據更新,但它以同樣的方式閃爍。

如果屏幕更新與幀速率同步,動畫將流暢地流動,但是如果間隔以不同的速率運行,它將執行雙重更新,或者對於某些看起來不穩定的週期進行更新。如果更新在sweap通過屏幕的那部分時發生,您甚至可以看到tearing

更新動畫的理想時間是在vertical blanking interval期間。這是掃描完成一個更新週期並等待下一個啓動的時間。這就是​​的用途。

+0

謝謝,我需要一些時間來處理它在我的頭:)。我會盡快回復問題 – 2015-04-02 12:30:31

+0

_如果屏幕更新與幀速率同步 - 我假設通過'幀速率'這裏指的是瀏覽器'重繪週期速率'?看起來有兩個框架:第一個是由設備刷新屏幕,第二個是由瀏覽器生成的,通常稱爲「repaint」,是否正確? – 2015-04-03 18:22:23

+1

@Maximus:幀頻是屏幕的更新週期,這是唯一相關的。如果瀏覽器執行某種雙緩衝,則不會注意到它,因爲它將與屏幕幀速率同步。重繪是當瀏覽器根據DOM中的變化更新屏幕時發生的,當沒有JavaScript運行時會發生這種情況。通過使用'requestAnimationFrame',可以對DOM進行更改,以便重新繪製這些更改(只要腳本返回就會發生)就會與屏幕幀速率同步。 – Guffa 2015-04-03 19:46:52