【问题标题】:How to delete Worker object in JavaScript?如何在 JavaScript 中删除 Worker 对象?
【发布时间】:2013-07-03 16:16:42
【问题描述】:

在我的网络应用程序中,我经常需要重新实例化 Worker 对象,因为无法将新脚本传递给旧的现有对象。一段时间后,一些浏览器开始阻止创建新的 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");
}

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

【问题讨论】:

    标签: javascript web-worker object-destruction


    【解决方案1】:

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

    delete window.worker
    

    也许调用终止然后删除它?

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

    documentation 声明它会停止一切,但在调用 terminate() 时不会清理。

    【讨论】:

    • 是的,如果你想完全删除它,似乎必须终止worker。谢谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2016-11-28
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多