【发布时间】:2020-02-17 07:10:39
【问题描述】:
我正在 600x600 像素的 HTML 画布上绘制数据的可视化。每个像素需要大约 10 次加法/乘法,所以计算量很小,但不是很多。不幸的是,这需要大约半秒钟的时间来绘制。这意味着我的滑块(通常会影响每个像素)不会平滑地更新可视化效果。
是否可以通过以更有效的方式进行绘图来提高性能?我目前正在为每个像素调用以下内容:
ctx.fillStyle = computedPixelColor
ctx.fillRect(x, y, 1, 1)
我读到创建图像并修改像素,然后将该图像插入 HTML 会更慢。真的吗?这个过程有什么技巧吗?
【问题讨论】:
-
使用
getImageData/putImageData,您可以通过操纵表示图像的内存数组来加快速度。查看this我几年前写的旧教程,768x768 图像,每个像素也有几个加法/乘法,但动画很流畅。 -
我刚刚尝试了
getImageData/putImageData机制,它的速度大致相同:(。 -
确保将整个图像放在一个调用中,而不是更新每个像素。请参阅链接示例。如果仍有问题,请使用实际代码创建minimal verifiable example。
-
你能分享一下你有什么吗?使用 ImageData(注意,只有一个)肯定会比 360000 fillRect 快。此外,根据获取像素的方式,您可以处理 ImageData 缓冲区的 Uint32Array 视图,以便更快地访问。
标签: javascript performance canvas html5-canvas