iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0

優化

canvas廣泛運用在網頁的2D繪圖、動畫、遊戲上,但效能自始至終是一個重要的問題,以下有幾點注意事項,可以提升canvas的效能:

  • 利用視窗外的畫布,重複渲染圖像到主畫布
    如果有一些需要重複繪製的圖像,可以在視窗外的畫布畫好,再重複渲染至主畫布,就不必每一次都重新繪製

  • 避免浮點數座標
    前面某一天有提到,浮點數的座標會造成鋸齒化的情況,為了避免此情況會希望大家多用整數座標,可以使用Math.floor()

  • drawImage時不要縮放圖片

  • 使用多層畫布畫多層場景
    例如遊戲,可以一層<canvas>背景,一層<canvas>UI,這樣背景那層就不用每一次都重新繪製

  • 用CSS設置大的背景圖
    盡量避免在<canvas>上繪製大圖,可以使用css

  • 用CSS transform縮放畫布
    因為css transform是使用GPU,效能較快

  • 關閉透明度
    在不需要使用透明度時,可以把透明度關掉,有關透明度的屬性shadowBlur也盡量避免使用

  • requestAnimationFrame()優於 setInterval()

  • 減少呼叫Canvas Api
    例如,做粒子效果時,可以直接做方形的,因為粒子大小,圓形跟方形看起來差不多,且圓形在canvas上的繪製步驟有三步驟,而方形只要fillRect(),且粒子一多,效能就有顯著差異

~如有疑問或是錯誤,歡迎不吝指教~

參考來源
[1]https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas
[2]https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/383877/


上一篇
【Day16】Canvas-像素控制"放大鏡"
下一篇
【Day18】Canvas-結論
系列文
菜雞用Canvas/Pixi動動動動動起來30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言