Javascript 更新画布上单个像素的最有效方法

Javascript 更新画布上单个像素的最有效方法,javascript,canvas,rendering,Javascript,Canvas,Rendering,假设我有一个画布,我想改变画布上单个像素的颜色,让新像素作为新颜色出现在屏幕上。我正在考虑更改图像数据,并使用新的图像数据重新渲染整个画布,但简单地在该点上渲染1x1像素的矩形可能会更快?或者画一条起点和终点相等的线 我的用例是将许多画布层叠在一起。我会非常频繁地改变这些画布上的单个像素(有时每秒数千次),我想要完美平滑的性能。我决定是使用屏幕外的画布、图像,还是简单地在上面渲染形状。每种方法都有各自的优点和缺点,但最有效的方法是什么呢 如果我选择在它们上渲染形状,我仍然会修改它们的图像数据,我

假设我有一个画布,我想改变画布上单个像素的颜色,让新像素作为新颜色出现在屏幕上。我正在考虑更改图像数据,并使用新的图像数据重新渲染整个画布,但简单地在该点上渲染1x1像素的矩形可能会更快?或者画一条起点和终点相等的线

我的用例是将许多画布层叠在一起。我会非常频繁地改变这些画布上的单个像素(有时每秒数千次),我想要完美平滑的性能。我决定是使用屏幕外的画布、图像,还是简单地在上面渲染形状。每种方法都有各自的优点和缺点,但最有效的方法是什么呢


如果我选择在它们上渲染形状,我仍然会修改它们的图像数据,我只需重新渲染整个画布/图像即可。不管我需要跟踪什么样的像素数据(对于需要完全重新渲染屏幕的情况),但我只是想知道哪种渲染方式最快。也许仅仅改变图像数据就足以显著降低速度?我不确定。非常感谢您的任何输入,即使它不是答案。

所有图层的单个图像数据应该是最快的。合成各种画布将在渲染管道中产生成本。如果只执行像素操纵,请在像素级别执行,以便渲染只需执行一次过程(但不要调用getImageData,请保留要操作的单个ImageData)。此外,“每秒数千次”,大多数监视器只能以60或120 fps的速度绘制,在rAF回调中批处理您的更改,这样您就不会要求合成器无偿工作。但是你的描述有点太宽泛了,不能百分之百地确定你应该做什么。只有测试才能判断。@kaido好的,听起来不错。非常感谢。这是一个很好的主意来批量处理我的电话,我一定会这样做。我肯定会测试一些东西,我只是想要一个基本的方向。谢谢你的意见!