如果我让网络工作者运行功能。函数完成后会自行关闭吗?
(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请求,或者用户单击“取消”按钮)。