通常咱們繪製圖片會用到的方法是drawImage
和putImageData
,還有做爲測試環境使用的createPattern
javascript
描述:html
使用方式:java
ctx.drawImage(image,sx,sy,swidth,sheight,x,y,width,height)
描述: Canvas 2D API 將數據從已有的 ImageData
對象繪製到位圖的方法。 若是提供了一個繪製過的矩形,則只繪製該矩形的像素。此方法不受畫布轉換矩陣的影響。canvas
使用方式:數組
ctx.putImageData(imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight)
描述:指定的方向內重複指定的元素,元素能夠是圖片、視頻,或者其餘 canvas 元素,被重複的元素可用於繪製/填充矩形、圓形或線條等等。ide
使用方式:函數
ctx.fillStyle = ctx.createPattern(img,"repeat") ctx.fill();
測試圖片尺寸爲(500x500)和(1920x1080)的jpg圖片性能
首先測試的是drawImage
方法,經過繪製同一張圖片不一樣的資源類型下的耗時測試
createPattern
填充了canvas做爲背景的狀況下渲染該圖片耗時:0.01ms左右createPattern
填充了canvas做爲背景的狀況下渲染該圖片耗時:0.01ms左右,(1920*1080)是2ms左右createPattern
填充了canvas做爲背景的狀況下渲染該圖片耗時:12ms左右,(1920*1080)是14ms左右createPattern
填充了canvas做爲背景的狀況下渲染該圖片耗時:2ms左右渲染圖片方式 | 空白canvas下渲染耗時 圖片尺寸(500*500) | 使用createPattern鋪滿下渲染耗時 圖片尺寸(500*500) | 空白canvas下渲染耗時 圖片尺寸(1920*1080) | 使用createPattern鋪滿下渲染耗時 圖片尺寸(1920*1080) |
---|---|---|---|---|
drawImage(Image) | 0.01ms | 0.01ms | 0.01ms | 0.01ms |
drawImage(ImageBitmap) | 0.01ms | 0.01ms | 0.01ms | 0.01ms |
drawImage(HTMLCanvasElement) | 0.01ms | 12ms | 0.01ms | 14ms |
putImageData | 1ms | 2ms | 1.8ms | 3ms |
- 由上面的測試結果能夠看出在空白canvas下渲染圖片,除了putImageData剩下的性能是一致的即Image = ImageBitmap = HTMLCanvasElement > putImageData。
- 而使用了createPattern平鋪做爲背景的狀況下Image = ImageBitmap > putImageData > HTMLCanvasElement
- 渲染圖片尺寸大小通常狀況下對drawImage(Image)和drawImage(ImageBitmap)的影響較小,並且性能優越。
- createPattern鋪滿的狀況下drawImage(HTMLCanvasElement)的性能最差和drawImage(Image)能達到3個數量級的差距
- drawImage(HTMLCanvasElement)在空白canvas下性能也很優越
- putImageData的性能處於中等,使用createPattern鋪滿背景的狀況下會有必定影響,不過不是太大
因此能夠不使用使用createPattern鋪滿背景的狀況下儘可能不要使用,可使用多層canvas,沒必要要的層級能夠減小重繪。或者將平鋪的背景轉爲Image對象使用。code
固然以上的結論爲我我的開發時的遇到的問題的總結,若是有誤請提出。由於樣本數量和圖片格式並無達到太多。