代码完成后,Webworker是否会自行关闭?

时间:2018-10-05 18:13:33

标签: javascript web-worker

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select class="form-control item" name="items[]">
  <option>Static option</option>
</select>

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

1 个答案:

答案 0 :(得分:0)

您不需要在网络工作者上致电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请求,或者用户点击“取消”按钮。