2011-08-25 92 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