是否有可能进一步优化此洪水填充算法



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

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

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

我可以使用更多优化或技巧来提高速度吗?

您可以简要地做几件事:

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

对于Uint32Array,您唯一需要注意的是字节顺序是小端序,这意味着您需要以0xAABBGGRR格式提供目标颜色(或执行初始位移,给出r,g,b作为单独的值)。

通过这些更改(除了最后一次),代码在我的计算机上从大约 69-75 毫秒下降到 58-61 毫秒(目前为 i5)。

更新的小提琴

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

最新更新