2017-07-03 57 views
4

如果您启动两个使用相同JavaScript文件的网络工作人员,则Firefox无法在about:debugging#workers中区分它们。你会得到两个相同的条目(列在“其他工作人员”下)。你可以给Web Worker分配一个名字吗?

为了进行调试,将名称分配给网络工作者会很方便。例如,在Java中有Thread#setName。 JavaScript的web worker API中有相当的东西吗?

回答

0

综上所述,我建议由the8472和帕特里克·埃文斯提供了这两种方法结合起来,以获得最佳的调试体验:

  1. 通过the web worker API设置名称(详情请参见the8472's answer
  2. 添加一个虚拟参数的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,浏览器最终可能会做额外的工作,甚至可能通过网络获取额外的数据。根据您的使用情况,如果您打算在生产中使用解决方法,这可能是一个缺点。在我的具体情况中,由于代码是静态服务的(它是浏览器扩展的一部分),所以概述不是问题。

5

Worker() constructor有一个可选的选项参数,它可以包含一个name属性,例如:

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

尼斯,我忽略了。你知道它是否便携?

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

它可以被理解为name工作者中全局对象的属性,例如,在调试器中。

+0

我在回答中带了一个简单的代码示例,以显示如何使用此选项Object来定义Web工作人员的名称;对不起,如果你不想要这个,显然回滚将不会有争议:) –

1

在api中看不到任何东西,但是您可以在url上放置一个唯一的查询参数以区分每个参数。

name="random unique name"; 
new Worker('worker.js?name='+name); 

查询字符串将在上市显示

enter image description here

相关问题