你可以给Web Worker分配一个名字吗?
如果您启动两个使用相同JavaScript文件的网络工作人员,则Firefox无法在about:debugging#workers
中区分它们。你会得到两个相同的条目(列在“其他工作人员”下)。你可以给Web Worker分配一个名字吗?
为了进行调试,将名称分配给网络工作者会很方便。例如,在Java中有Thread#setName。 JavaScript的web worker API中有相当的东西吗?
综上所述,我建议由the8472和帕特里克·埃文斯提供了这两种方法结合起来,以获得最佳的调试体验:
- 通过the web worker API设置名称(详情请参见the8472's answer)
- 添加一个虚拟参数的URL,所以它会在Firefox中显示出来(详见Patrick Evans' answer)
例如,而不是
let worker = new Worker(url);
写这样的事情
let worker = new Worker(`${url}?name=SomeContext`, { name: 'Some useful context' });
至少在Firefox 54中,可选的名称参数不会显示在工作人员概览中。因此,扩展URL仍然有用。在另一方面,使用API(即使它目前不从我看到使用Firefox浏览器)似乎是一个好主意,当你看the documentation:
名称:A DOMString为指定标识名称DedicatedWorkerGlobalScope表示工作者的范围,主要用于调试目的。
我希望浏览器在工作人员概览中显示名称(例如,Firefox中的about:debugging#workers
),这会使URL扩展变通方法过时。
请注意,通过修改URL,浏览器最终可能会做额外的工作,甚至可能通过网络获取额外的数据。根据您的使用情况,如果您打算在生产中使用解决方法,这可能是一个缺点。在我的具体情况中,由于代码是静态服务的(它是浏览器扩展的一部分),所以概述不是问题。
的Worker() constructor有一个可选的选项参数,它可以包含一个name属性,例如:
let workerOne = new Worker(URL, {
'name' : 'nameOfWorkerOne'
}),
workerTwo = new Worker(URL, {
'name' : 'nameOfWorkerTwo'
});
尼斯,我忽略了。你知道它是否便携?
在上面链接的MDN页面上有一个link to the specification。如果你遵循白兔,你会看到选项参数是规范的一部分。
它可以被理解为name工作者中全局对象的属性,例如,在调试器中。
我在回答中带了一个简单的代码示例,以显示如何使用此选项Object来定义Web工作人员的名称;对不起,如果你不想要这个,显然回滚将不会有争议:) –