如果您启动两个使用相同JavaScript文件的Web工作者,则Firefox无法在about:debugging#workers
中区分它们。你得到两个相同的条目(列在"其他工人")。
对于调试,为web worker分配名称会很方便。例如,在Java中有Thread#setName。在JavaScript的Web worker API中是否有相同的东西?
答案 0 :(得分:6)
Worker() constructor采用可选的options参数,该参数可以包含name属性,例如:
let workerOne = new Worker(URL, {
'name' : 'nameOfWorkerOne'
}),
workerTwo = new Worker(URL, {
'name' : 'nameOfWorkerTwo'
});
很好,我忽略了这一点。你知道它是否便携?
我上面链接的MDN页面上有一个link to the specification。如果您遵循白兔,您将看到options参数是规范的一部分。
它可以被读作工作者中全局对象的name属性,例如在调试器中。
答案 1 :(得分:1)
不要在api中看到任何内容,但您可以在网址上添加一个唯一的查询参数来区分每个参数。
name="random unique name";
new Worker('worker.js?name='+name);
查询字符串将显示在列表
中答案 2 :(得分:0)
总之,我建议结合使用8472和Patrick Evans提供的两种方法来获得最佳的调试体验:
例如,而不是
let worker = new Worker(url);
写这样的东西
let worker = new Worker(`${url}?name=SomeContext`, { name: 'Some useful context' });
至少在Firefox 54中,可选名称参数未显示在工作者概述中。因此,扩展URL仍然很有用。另一方面,当你查看the documentation时,使用API(即使Firefox目前没有使用它)似乎是个好主意:
name:DOMString,指定DedicatedWorkerGlobalScope的标识名称,表示worker的范围,主要用于调试目的。
我希望浏览器在工作者概述中显示该名称(例如,Firefox中的about:debugging#workers
),这会使URL扩展解决方案过时。
请注意,通过修改URL,浏览器可能最终会执行额外的工作,甚至可能通过网络获取额外的数据。根据您的使用情况,如果您打算在生产中使用变通方法,这可能是一个缺点。在我的特定情况下,概述不是问题,因为代码是静态服务的(它是浏览器扩展的一部分)。