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

时间:2016-05-21 04:58:55

标签: javascript html canvas optimization flood-fill

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

我已经记录了速度所以进行任何更改,只需重新运行几次,看看性能是否会提高。

已经工作了几个小时,我想不出任何其他我可以改变以使其更快。我希望它尽可能快,因为当用户使用floodfill时会有一个小延迟,并且为了获得正确的用户体验,我希望延迟尽可能短。

我可以使用更多的优化或黑客来提高速度吗?

1 个答案:

答案 0 :(得分:1)

您可以在短暂的一瞥中做几件事:

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

Uint32Array唯一需要注意的是字节顺序是little-endian,这意味着你需要提供0xAABBGGRR格式的目标颜色(或者做一个初始的位移给出r,g,b作为单独的值)。

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

<强> Updated fiddle

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