2016-06-22 14 views
1

當Chrome瀏覽器運行正常時,Chrome瀏覽器在我的連接四個瀏覽器遊戲中繼續查殺頁面。遊戲是一個玩家vs電腦設置,遊戲本身運行正常,從不崩潰。當我將迭代次數設置得太高來訓練計算機對手時,該頁面崩潰。這些程序使用qLearning算法訓練ai,並在其中播放自身併爲每個遇到的狀態存儲一個值。如果我將迭代次數設置爲大約125,000或更少,那麼一切正常(除非對手不那麼好)。我無法確定是否是殺死程序的循環運行時間(運行大約需要30分鐘),或者是記錄狀態及其對應q值的內存限制等其他內容。Javascript - 在長循環期間阻止Chrome瀏覽器從殺死頁面中移除

我怎樣才能讓程序運行更多的訓練迭代而不會造成Chrome瀏覽器的頁面死機?

+0

你嘗試過'setInterval'嗎? – Dimava

+0

[窗口setInterval()方法](http://www.w3schools.com/jsref/met_win_setinterval.asp) – Dimava

回答

2

關於如何處理代碼,您有幾個選項。

選項1:setInterval/setTimeout

正如其他人所建議的,使用setIntervalsetTimeout可以在「塊」上運行的代碼,沒有人會大塊導致超時。

選項2:setInterval + generators

隨着深度嵌套代碼,使用的setTimeout是很難正確地重新輸入代碼。

generators上閱讀 - 這使得運行代碼塊更好,但它可能需要一些重新設計。

方案3:webworkers

Webworkers提供了另一種方式,這取決於你正在計算什麼。他們在後臺運行,無法訪問DOM或其​​他任何東西,但他們在計算時非常出色。

方案4:的NodeJS

你的最後一個選項是從瀏覽器移開,而在另一個環境,如node.JS運行。如果你在Windows下運行,HTA文件可能是另一種選擇。

+0

我想說的出發點肯定應該是webworkers 1)計算不是UI相關的,所以它不應該在主線程上,以及2)該方法需要超過0.5-1秒,所以它不應該在UI線程上的第二個原因。 3)我在想象chrome會殺死calc,因爲它在主線程中有嚴格的限制,而如果它在後臺線程中,chrome會更寬鬆。 –

相關問題