2012-06-30 80 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); 
};