我使用Mozilla开发人员网络(MDN)文档作为主要来源,了解JavaScript Web Worker API。 The documentation suggests新Worker的构造函数接受type
参数。根据同一文档,此type
参数可以接受classic
或module
的值。
不幸的是,文档没有描述classic
和module
之间的区别。我什么时候想要使用classic
与module
以及两种"类型之间的行为差异"工人?
答案 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模块的浏览器支持并不是那么好。