这是它的小提琴: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
我将把类型化数组留给堆栈作为练习。 :-)