您可以为Web Worker分配名称吗?

Phi*_*ßen 5 javascript debugging firefox web-worker

如果您启动两个使用相同JavaScript文件的Web工作者,则Firefox无法区分它们about:debugging#workers.您将获得两个相同的条目(在"其他工人"下列出).

对于调试,为web worker分配名称会很方便.例如,在Java中有Thread #setName.JavaScript的Web worker API中是否有相同的东西?

the*_*472 6

工人()构造有一个可选选项参数,它可以包含一个名称属性,例如:

let workerOne = new Worker(URL, {
  'name' : 'nameOfWorkerOne'
}),
    workerTwo = new Worker(URL, {
  'name' : 'nameOfWorkerTwo'
});
Run Code Online (Sandbox Code Playgroud)

很好,我忽略了这一点.你知道它是否便携?

在上面链接的MDN页面上有一个指向规范的链接.如果您按照白兔,您将看到options参数是规范的一部分.

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


Phi*_*ßen 1

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

  1. 通过Web Worker API设置名称(详细信息,请参阅8472的答案
  2. 在 URL 中添加一个虚拟参数,这样它将显示在 Firefox 中(有关详细信息,请参阅Patrick Evans 的回答

例如,代替

let worker = new Worker(url);
Run Code Online (Sandbox Code Playgroud)

写这样的东西

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

至少在 Firefox 54 中,可选的 name 参数不会显示在工作器概述中。因此,扩展URL还是有用的。另一方面,当您查看文档时,使用 API(尽管据我所知 Firefox 目前并未使用该 API)似乎是一个好主意:

name:一个 DOMString,指定 DedicatedWorkerGlobalScope 的标识名称,表示工作线程的范围,主要用于调试目的。

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

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