美文网首页
Canvas context 方法 putImageData 和

Canvas context 方法 putImageData 和

作者: 歇歇 | 来源:发表于2018-09-04 17:58 被阅读17次

实验

画12 x 12的小方块

let canvas = document.getElementById("canvas")
let ctx = canvas.getContext("2d")

let imageData = new ImageData(12, 12)
imageData.data.forEach((item, index) => {
  imageData.data[index] = [0, 0, 0, 255][index % 4]
})
console.time()
for (let i = 0; i < 10000; i++) {
 ctx.putImageData(imageData, x + i, y + i)
}
console.timeEnd()

this.ctx.fillStyle = rgba(0, 0, 0, 155)
console.time()
for (let i = 0; i < 10000; i++) {
 ctx.fillRect(x + i, y + i, 12, 12)
}
console.timeEnd()

10次渲染结果:putImageData 效率是 fillRect 的 3.3%

putImageData / ms fillRect / ms
1.348 0.032
0.767 0.019
0.550 0.028
0.296 0.020

1000次渲染结果:putImageData 效率是 fillRect 的 4.4%

putImageData / ms fillRect / ms
40.8 1.99
23.7 0.95
20.0 0.94
19.8 0.81

10000次渲染结果:putImageData 效率是 fillRect 的 21%

putImageData / ms fillRect / ms
48 6
51 22
37 7
55 7

100000次渲染结果: putImageData 效率是 fillRect 的 124%

结论

我们在绘制小方块时,请务必选择方法fillRect

putImageData有类似重复执行渲染的优化,故在大量渲染,或需要复杂彩色色块渲染时才使用它。

相关文章

网友评论

      本文标题:Canvas context 方法 putImageData 和

      本文链接:https://www.haomeiwen.com/subject/agrnwftx.html