Javascript - 等待网络工作者完成?

时间:2012-06-30 07:10:11

标签: javascript ajax web-worker topic-modeling

我正在javascript中实现主题建模的LDA算法作为项目的一部分。单击按钮后,将调用执行LDA的功能。然而,由于这是一项非常繁重的任务,浏览器在调用函数时曾经挂起大约15秒(即使加载动画gif在处理过程中也无法正常工作)。

所以我将该函数实现为web worker。这解决了悬挂问题,但现在加载动画在几秒钟内消失,而结果显示在此后12-14秒。

在处理过程中,有什么方法可以让加载器动画化吗?我的意思是等待网络工作者在加载动画消失之前完成计算。

脚本是异步调用的,加载器附加到jQuery的ajax事件

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

1 个答案:

答案 0 :(得分:3)

在启动(重)工作逻辑之前激活微调器,并在工作完成后禁用微调器:

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);
};