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