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