"经典"之间的区别是什么?和"模块"网络工作者?

时间:2017-12-31 20:47:39

标签: javascript web-worker

我使用Mozilla开发人员网络(MDN)文档作为主要来源,了解JavaScript Web Worker API。 The documentation suggests新Worker的构造函数接受type参数。根据同一文档,此type参数可以接受classicmodule的值。

不幸的是,文档没有描述classicmodule之间的区别。我什么时候想要使用classicmodule以及两种"类型之间的行为差​​异"工人?

1 个答案:

答案 0 :(得分:6)

module类型与type="module" attribute does for a script tag的用途大致相同。它告诉浏览器正在加载的工作脚本是一个ES6模块(这是必要的元数据,知道如何解析和运行它,as this article goes into a bit)。

如果您的工作模块是ES6模块(可能带有import语句),您可以使用它。如果启用了CORS,它还可以加载来自不同来源的工作人员,这是经典工作人员无法加载的(即使不使用import语句也可能是一个有吸引力的功能)。

来自 HTML Living Standard - Using a JavaScript module as a worker

  

到目前为止,我们的所有示例都显示了运行经典脚本的工作人员。工作人员可以使用模块脚本进行实例化,模块脚本具有通常的好处:能够使用JavaScript import语句导入其他模块;严格模式默认;和顶层声明不会污染工人的全球范围。

     

请注意,与传统工作者相比,此类基于模块的工作人员对跨源内容遵循不同的限制。与传统工作者不同,模块工作程序可以使用跨源脚本进行实例化,只要该脚本使用CORS协议公开即可。此外,importScripts()方法将在模块工作程序内自动失败; JavaScript import语句通常是更好的选择。

截至今天,您可能无法在生产中使用它,因为对ES6模块的浏览器支持并不是那么好。