Javascript - 等待 Web worker 完成

Javascript - Wait for web worker to finish?

本文关键字:worker 完成 Web 等待 Javascript      更新时间:2023-09-26

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

所以我以 Web 工作者的身份实现了这个功能。这解决了挂起问题,但现在加载动画在几秒钟内消失,而结果会在大约 12-14 秒后显示。

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

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

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

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

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