您可以为 Web Worker 指定名称吗?

Can you assign a name to a Web Worker?

如果您启动两个使用相同 Java 脚本文件的网络工作者,Firefox 无法在 about:debugging#workers 中区分它们。您会得到两个相同的条目(在 "Other Workers" 下列出)。

为了调试,为网络工作者分配名称会很方便。例如,在 Java 中有 Thread#setName。 JavaScript 的 web worker API 中是否有等效的东西?

Worker() constructor 接受一个可选的选项参数,它可以包含一个名称 属性,例如:

let workerOne = new Worker(URL, {
  'name' : 'nameOfWorkerOne'
}),
    workerTwo = new Worker(URL, {
  'name' : 'nameOfWorkerTwo'
});

Nice, I overlooked that. Do you know if it is portable?

我在上面链接的 MDN 页面上有一个 link to the specification。如果你关注小白兔,你会看到选项参数是规范的一部分。

可以读作worker中全局对象的name属性,例如在调试器中。

总而言之,我建议结合 the8472 和 Patrick Evans 提供的两种方法以获得最佳调试体验:

  1. 通过 the web worker API (for details, see )
  2. 设置名称
  3. 向 URL 添加一个虚拟参数,以便在 Firefox 中显示(有关详细信息,请参阅 Patrick Evans' answer

例如,而不是

let worker = new Worker(url);

写这样的东西

let worker = new Worker(`${url}?name=SomeContext`, { name: 'Some useful context' });

至少在 Firefox 54 中,可选的 name 参数没有显示在 worker 概览中。因此,扩展 URL 仍然有用。另一方面,当您查看 the documentation:

时,使用 API (即使从我所见的 Firefox 当前未使用它)似乎是个好主意

name: A DOMString specifying an identifying name for the DedicatedWorkerGlobalScope representing the scope of the worker, which is mainly useful for debugging purposes.

我希望浏览器会在工作人员概览中显示该名称(例如,Firefox 中的 about:debugging#workers),这会使 URL 扩展解决方法过时。

请注意,通过修改 URL,浏览器最终可能会执行额外的工作,甚至可能会通过网络获取额外的数据。根据您的用例,如果您打算在生产中使用解决方法,这可能是一个缺点。在我的具体情况下,概述不是问题,因为代码是静态提供的(它是浏览器扩展的一部分)。