【问题标题】:Javascript - Wait for web worker to finish?Javascript - 等待网络工作者完成?
【发布时间】:2012-07-01 20:51:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 不要将它附加到 ajax 事件中。对 web worker 不太熟悉,无法告诉你在哪里附加它,但它应该有一些自己的事件处理程序。
  • 希望看到您的 LDA 实施
  • @editor 它的开源作品,所以你可以在这里关注它:github.com/ekanshpreet/data-portraits
  • 谢谢。我可以在任何地方看到它的运行情况?
  • @editor 你可以在这里查看它nsitonline.in/ekansh/berkman.. 它是一个仍处于早期阶段的项目,因此可能存在错误:-)

标签: javascript ajax web-worker topic-modeling


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多