如何在JavaScript中删除Worker对象?

时间:2013-07-05 14:12:40

标签: javascript web-worker object-destruction

在我的Web应用程序中,我经常不得不重新实例化Worker对象,因为无法将新脚本传递给旧的现有对象。一段时间后,一些浏览器开始阻止创建新的Worker对象,因为它们对一个窗口的工作限制已达到。我尝试在创建新对象之前删除已完成的工作对象,但显然我是以错误的方式进行的。这是一个简单的测试,在opera中失败(每个窗口限制为256个工作符):

var worker;    
for(var i = 0; i < 300; i++) {
  for (var key in worker) worker[key] = null;
  delete worker.onmessage;
  delete worker.onerror;
  delete worker;
  worker = new Worker("script.js");
}

我的问题是如何完全删除工作对象,以便永远不会达到浏览器限制?谢谢!

2 个答案:

答案 0 :(得分:1)

不确定这是否适用于网络工作者。你在窗口上创建对象吗?如果是这样,你可以试试这个:

delete window.worker

也许叫终止然后删除它?

window.worker.terminate();
delete window.worker;

documentation表示它会停止所有内容,但在调用terminate()时不会清理。

答案 1 :(得分:1)

您需要终止工作者,而不是删除该对象。删除对象的所有操作都是删除指向worker的指针。根据我的经验,有太多的OPEN工作人员是一个会阻止你的程序工作的问题,但是对于那些被self.close()关闭的工人没有限制;在worker或worker.terminate();在主脚本中。如果正确关闭工作人员,则永远不必使用删除工作程序。