如果我让网络工作者运行功能。函数完成后会自行关闭吗?



(function(){a = 3+2;})();





还是我需要通过调用webworker的close()函数来显式关闭此Webworker?

最佳答案

您不需要在Web Worker上调用close()terminate()。 Web Worker像大多数JavaScript对象一样超出范围时会自动清理自己。因此,在您的示例中,如果您的网络工作者看起来像这样:

onmessage = function(e) {
    postMessage(3 + 2);
}


您从主脚本中这样调用它:

function doAThing() {
    var myWorker = new Worker('worker.js');
    myWorker.postMessage();
    myWorker.onmessage = function(e) {
        console.log('Message received from worker', e.data);
    };
}


worker返回其3 + 2结果后将停止执行,但仍将保留在内存中,并且仍可以被调用,直到myWorker变量超出范围。

在此示例中,在doAThing()完成后您将无法再调用工作程序,并且垃圾收集器应在doAThing()完成后清理工作程序,并调用消息回调,因为此时没有任何内容参考了。

您想呼叫close()terminate()的情况是,如果您有一个长寿的任务要提早结束(例如,您想提早结束XHR请求,或者用户单击“取消”按钮)。

07-26 06:39