Javascript 为什么在MDN';什么是网络工作者的例子?

Javascript 为什么在MDN';什么是网络工作者的例子?,javascript,Javascript,这个问题涉及到在MDN文档中使用web workers的一个问题 在整个示例中,几个“随机”字符串用作键:“vo42t30”、“rnb93qh”、“bk4e1h0”、“ktp3fm1” 使用这些字符串的理由是什么 (我可以想象,一些真实世界的代码可能会使用这种字符串作为模糊处理的一种形式,但由于混淆像这样的说教示例是没有意义的,因此我认为必须有其他解释。) 也许更好的表达问题的方式是:为此类web worker键使用人类可读的字符串(例如“methodName”)是否存在问题?示例中的代码用于创

这个问题涉及到在MDN文档中使用web workers的一个问题

在整个示例中,几个“随机”字符串用作键:“vo42t30”、“rnb93qh”、“bk4e1h0”、“ktp3fm1”

使用这些字符串的理由是什么

(我可以想象,一些真实世界的代码可能会使用这种字符串作为模糊处理的一种形式,但由于混淆像这样的说教示例是没有意义的,因此我认为必须有其他解释。)


也许更好的表达问题的方式是:为此类web worker键使用人类可读的字符串(例如“methodName”)是否存在问题?

示例中的代码用于创建特殊类型的web worker

这个特殊工作程序检查消息是否有密钥,如果有,该工作程序将以特殊方式处理消息

并非所有邮件都将具有此特殊密钥。没有该密钥的消息应该正常处理。例如,这种其他类型的消息可能具有以用户输入命名的键

因为我们不知道一条常规消息会有什么密钥,而且我们必须确保我们的密钥不会被常规消息使用,所以我们选择了一个非常独特的密钥,在本例中是gibberish,希望它不会被用作常规消息中的密钥


这种方法的一个问题是,如果密钥来自用户输入,那么用户可能会通过发送我们的胡言乱语作为输入来触发意外行为。

代码似乎正在使用这些作为唯一标识符,以便将消息发送到正确的目的地。我一点也不清楚为什么会选择这些,如果我需要这种东西,我只会使用一个简单的前缀和递增索引,并且可能将它们作为值而不是键,例如
target:“worker-1”
target:“worker-2”
,等等。谢谢你的回答,但我真的听不懂你说的话。看看这个策略(对键使用胡言乱语)试图避免的场景类型的例子会很有帮助。另外,我意识到你不一定在提倡你所描述的策略,而只是建议对其他人的代码进行解释,所以请不要把我的下一个问题(在下一篇评论中)当作是对你的批评。我只是想确保…(续)…我没有误解你。在某种程度上,我理解了你所说的,对我来说,这听起来类似于对程序中的所有标识符使用乱七八糟的字符序列,以防止将来版本的ECMA标准引入新的保留关键字与我们的一个标识符相冲突的可能性。这是一个公平的类比吗?如果不是,这两种情况之间的关键区别是什么?因此,可以使用函数QueryableWorker来创建web workers。如果数据有一个特殊的密钥,那么这个工作者将做一些特殊的事情。由于您可以使用同一个worker作为传递随机数据的常规worker,因此需要确保随机数据不会触发这种特殊行为。我会尽量让我的答案更清楚。
oWorker.onmessage = function (oEvent) {
  if (oEvent.data instanceof Object && oEvent.data.hasOwnProperty("vo42t30") &&
      oEvent.data.hasOwnProperty("rnb93qh")) {
    oListeners[oEvent.data.vo42t30].apply(oInstance, oEvent.data.rnb93qh);
  } else {
    this.defaultListener.call(oInstance, oEvent.data);
  }
};