这是它的小提琴:https://jsfiddle.net/rujbra6y/3/
我已经在记录速度,因此请进行任何更改并重新运行几次以查看性能是否提高。
已经工作了几个小时,我想不出还有什么可以改变的,以使其更快。我希望它尽可能快,因为目前用户使用floodfill
时会有一个小的延迟,为了获得适当的用户体验,我希望延迟尽可能短。
我可以使用更多优化或技巧来提高速度吗?
您可以简要地做几件事:
- 将
Uint8ClampedArray
替换为Uint32Array
。这将使您免于不必要的换档和 AND 操作 - 将 push/pop 替换为堆栈指针,这样您只需更新实例
- 您可以使用固定大小为堆栈定义类型化数组 (Int16Array)(确保使其足够大)
对于Uint32Array,您唯一需要注意的是字节顺序是小端序,这意味着您需要以0xAABBGGRR格式提供目标颜色(或执行初始位移,给出r,g,b作为单独的值)。
通过这些更改(除了最后一次),代码在我的计算机上从大约 69-75 毫秒下降到 58-61 毫秒(目前为 i5)。
更新的小提琴
我将把类型化数组留给堆栈作为练习。