2012-08-14 42 views
0

我正在嘗試使用遺傳算法優化交通信號燈時間。我在html5中製作了一個流量動畫,並且在JavaScript中實現了GA。所以,當我想運行該動畫的模擬時,它會永遠運行。在javascript中動畫的模擬很慢

動畫每20ms繪製信號燈和汽車,並更新下一次迭代的值。在模擬中我只需要調用更新函數,因爲我不需要畫信號燈和汽車。

所以動畫和模擬的區別在於,模擬不會在畫布上繪製任何東西,並且它在while循環中運行,而動畫在setInterval循環中運行。

任何想法如何加快模擬?

我試着計算行程時間每一輛汽車,但它真的很難,因爲你需要包括紅色的等待時間,擁塞等

+0

你可以發佈一些代碼或設置JS Bin演示嗎?你是指「模擬動畫」是什麼意思?此外,'setInterval'從來沒有用於動畫 - 你看過'requestAnimationFrame'嗎? – Utkanos 2012-08-14 12:34:14

+1

根據您的代碼,可能考慮將模擬外包給[webworker](https://developer.mozilla.org/en-US/docs/Using_web_workers),並將更新發送到主線程。 – Sirko 2012-08-14 12:36:26

回答

1

如果我正確理解你在你無限運行仿真在while循環中運行代碼(或運行時間很長的代碼)。

這是你的問題。在像C++和Java這樣的語言中,由於多線程,這是非常正常的做法。當他們咀嚼代碼時,其他代碼仍然可以運行,屏幕仍然可以更新......等等。

JS是一個單線程。從字面上看,它會繼續運行,而循環和幾乎沒有別的東西,破壞你的程序的順利運行。以這種方式使用while循環絕對是單線程語言中的「從不做那件事」。