2012-06-30 82 views
1

我在JavaScript中實現了主題建模的LDA算法作爲項目的一部分。點擊一個按鈕後,調用執行LDA的函數。然而,由於這是一項非常繁重的任務,當函數被調用時,瀏覽器常常掛起大約15秒鐘(即使加載動畫gif在處理過程中不起作用)。Javascript - 等待web worker完成?

所以我實現了作爲web worker的功能。這解決了懸掛問題,但現在加載動畫在幾秒鐘內消失,而結果在此之後顯示約12-14秒。

有沒有什麼辦法可以使加載器動畫處理正在進行?我的意思是等待網絡工作者在加載動畫消失之前完成計算。

該腳本異步調用和加載器被附接到的jQuery AJAX事件

$('#spinner').bind("ajaxSend", function() { 
    $(this).show(); 
}).bind("ajaxComplete", function() { 
    $(this).hide(); 
}); 
+0

做不附加到ajax事件..不太熟悉網絡工作者告訴你在哪裏附加它,但它應該有自己的一些事件處理程序.. – Baz1nga

+0

很想看到你的LDA實現 – buley

+1

@editor它的開源工作所以你可以在這裏關注它:https://github.com/ekanshpreet/data-portraits – eku

回答

3

激活inititating的(重)工人邏輯之前所說的紡絲器,並且一旦工人完成禁用微調:

var worker = new Worker('workerscript.js'); 
worker.onmessage = function(event) { 
    // Do something with event.data, then hide the spinner. 
    $('#spinner').hide(); 
}; 
$('#spinner').show(); 
worker.postMessage({args: ' foo bar '}); 

workerscript.js應該是這樣的:

self.onmessage = function(event) { 
    var results; 
    // do something 
    ... 
    // Done: 
    postMessage(results); 
};