这是它的小提琴:https://jsfiddle.net/rujbra6y/3/

我已经在记录速度,因此请进行任何更改,然后重新运行几次以查看性能是否完全提高。

已经工作了几个小时,我想不出什么我可以更改以使其更快的方式了。我希望它尽可能快,因为当前用户使用floodfill时会有一个小的延迟,并且为了获得适当的用户体验,我希望该延迟尽可能地短。

我还能使用其他优化或技巧来提高速度吗?

最佳答案

简要介绍一下您可以做的几件事:


Uint8ClampedArray替换为Uint32Array。这将使您免于不必要的移动和AND操作
用堆栈指针替换push / pop,这样您就可以更新实例
您可以使用固定大小为堆栈定义一个类型化数组(Int16Array)(一定要使其足够大)


对于Uint32Array,您需要了解的唯一一件事是字节顺序为little-endian,这意味着您需要以0xAABBGGRR格式提供目标颜色(或进行初始位移,将r,g,b作为单独的值)。

经过这些更改(最后一次除外),我的计算机上的代码从大约69-75ms降至了58-61ms(目前为i5)。

Updated fiddle

我将把类型化数组留给堆栈作为练习。 :-)

07-24 09:44
查看更多