在我的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");
}
我的问题是如何完全删除工作对象,以便永远不会达到浏览器限制?谢谢!
答案 0 :(得分:1)
不确定这是否适用于网络工作者。你在窗口上创建对象吗?如果是这样,你可以试试这个:
delete window.worker
也许叫终止然后删除它?
window.worker.terminate();
delete window.worker;
documentation表示它会停止所有内容,但在调用terminate()时不会清理。
答案 1 :(得分:1)
您需要终止工作者,而不是删除该对象。删除对象的所有操作都是删除指向worker的指针。根据我的经验,有太多的OPEN工作人员是一个会阻止你的程序工作的问题,但是对于那些被self.close()关闭的工人没有限制;在worker或worker.terminate();在主脚本中。如果正确关闭工作人员,则永远不必使用删除工作程序。