2013-07-22 58 views
-1

我有this代碼導致具有褪色效果的鉛筆。我是以this爲例做的。我現在在移動網站上使用它和其他重要的東西(WebRTC)。問題是這段代碼使用了一個計時器(setInterval(loop, 1000/60);)來創建淡入淡出效果,這似乎很重。在畫布中具有褪色效果的性能問題

在HTML5/Canvas中是否有另一種更輕的方式讓鉛筆具有淡入淡出效果?

+0

取決於什麼是在循環中運行。 – Neil

+0

一切都在jsfiddle鏈接 –

回答

1

看起來您已經完成了一個高性能的步驟,即將框架圖移動到定時循環而不是繪製移動處理程序。

現在,您可以通過使用requestAnimationFrame(RAF)而不是setInterval來讓您的循環更加高效。

RAF是首選,因爲它更友好的資源:

  • RAF在資源可用和延誤當資源稀缺執行。
  • 如果RAF正在瀏覽器選項卡中執行並且焦點切換到另一個選項卡,則RAF將暫停。
  • 如果多個循環正在執行RAF,則RAF將對瀏覽器更改進行分組和緩衝。

如果您需要更多統一的循環時間,您甚至可以將RAF包裹在setTimeout中。

由於setTimeout是異步的,所以在它正在倒計時時不會消耗UI線程。

var fps = 30; 
function animate() { 
    setTimeout(function() { 
     requestAnimationFrame(animate); 

     // update frame info here 

     // draw the new frame here 

    }, 1000/fps); 
} 

這是爲什麼使用英國皇家空軍是從性能方面考慮,優選一個非常好的職位:

http://creativejs.com/resources/requestanimationframe/

+0

好!我試圖通過取消計時器來提高性能,但不繪製任何內容並將幀速率從60 fps降低到30,如同在答案中一樣,並將我的建議與您的建議進行比較。這兩者似乎都比我的問題更好。此外,當只有使用WebRTC訪問攝像頭時,兩者都不會破壞實時感覺,但是,開始視頻會議會讓所有事情變得糟糕......我想我必須購買更好的手機...... –