2015-03-18 62 views
2

我正在從一個噪聲算法生成模式的JS項目。我產生了多個八度的噪音,以獲得我想要的結果,其結果大約是7,000,000個值。正如你可以想象的那樣,我得到了一個沒有反應的腳本錯誤。JS:防止無響應的腳本警告

  • 有沒有辦法在現代瀏覽器中抑制此消息?在這種情況下,腳本正在執行預期的行爲 - 產生噪音 - 預計它會花費一點時間。
  • 用服務器端語言生成噪聲並使用AJAX或其他語言傳遞回來會更快嗎?

謝謝!

+0

將腳本分成更小的「塊」,使用較少的時間完成並使用'setTimeout'在當前的腳本完成後觸發下一個腳本;或者查看_web workers_而不是。 – CBroe 2015-03-18 23:59:13

回答

1

你可以使用webworkers,這看起來是這樣的:

if (window.Worker) { 
    // load web worker 
    var thread = new Worker("webworker.js"); 
    // message received from web worker 
    thread.onmessage = function(e) { 
     var noise = e.data; 
     //do something 
    } 
    // start web worker 
    thread.postMessage(7000000); 

} 
else { 
    output.textContent = "Web Workers are not supported in your browser"; 
} 

webworker.js:

self.onmessage = function(e) { 
    var r = e.data; 
    while (r-- > 0) { 
     //generate some noise 
    } 
    self.postMessage(noise); 

};

如果您不想使用webworkers,那麼對於您的生成過程的每個「步驟」,都要用一個小小的延遲將其包裝在setTimeout中。這些延遲會讓瀏覽器有時間做其他事情並保持響應。