2011-08-25 109 views
0

我有一个巨大的点阵列绘制在画布上。现在我正在通过对数据数组上的x和y运行嵌套循环来绘制每个点。这似乎是导致Firefox显示脚本已被吊死的通知。与嵌套循环的JavaScript优化

什么是避免,最好的方法是什么?

IMO某种并行循环的解决方案将是巨大的,但问题是我不知道有任何这样的方法。

+1

需要您使用的是了解如何优化它的代码。 –

+3

如果你有1000的宽度和1000的高度,你将不得不画1.000.000点。这不能通过更好的循环来改善。 – jantimon

+2

它不能被加速,但反应可以恢复:分批过程中,每一个经过的setTimeout开始依次进行(),不要尝试太多的一次处理。例如,在每个完整的内部循环在通过setTimeout()调用该函数以启动下一个循环之后,不要在for循环内部执行它,该循环不会产生,而是立即执行。 –

回答

0

如果你只是建立由像素的图像像素,你的方式最好在“图像数据”对象执行,然后是下降到画布上时,即可大功告成。将像素放入数组要比将像素逐像素调用画布API要便宜得多。

有一个方法叫“createImageData()”您使用作出的ImageData对象,这其实就是有高度/宽度像素阵列。像素被组织为一个简单的线性阵列,每组四个阵列元素代表一个像素。四个值只是红色,绿色和蓝色的颜色值,以及不透明度的Alpha值。

当你的代码已经填写了所有的像素值,你只需要调用“putImageData()”把它画到画布上。

+0

我正在制作热图...所以这不是我可以实现的... – Amit