从 Chrome 80 开始,您可以使用以下命令创建模块类型工作人员new Worker("worker.js", { type: "module" })
,然后使用模块功能,例如import
在工人脚本中。然而其他浏览器仍在努力支持这一点,因此使用它需要功能检测和后备。
有没有一种方便简单的方法来为工作人员提供检测模块支持?
请注意,在某些平台(例如 Cordova)上,创建工作线程实际上并不简单,并且涉及大量解决方法,因此在纯 JS 中工作的东西将是理想的。
正如每一个initOptions
功能,你可以使用我所说的“字典陷阱”。
它是一个对象,您可以在其上设置属性 getter(您想要测试的属性 getter),并让该 getter 在您正在测试的构造函数获取该布尔值时切换布尔值。这适用于很多这样的功能,并且 Worker 的type
这里也不例外。
使用 Worker 时您唯一要小心的事情是避免实际启动一个 Worker(即使启动一个空 Worker 也意味着必须运行一个新的事件循环、一个新的 JS 上下文,这些都不是小操作)并避免它发出无用的网络请求(甚至 404 也会占用资源)。
这是这样一个测试器,使用字符串"blob://"
有办法避免这两种情况。
function supportsWorkerType() {
let supports = false;
const tester = {
get type() { supports = true; } // it's been called, it's supported
};
try {
// We use "blob://" as url to avoid an useless network request.
// This will either throw in Chrome
// either fire an error event in Firefox
// which is perfect since
// we don't need the worker to actually start,
// checking for the type of the script is done before trying to load it.
const worker = new Worker('blob://', tester);
} finally {
return supports;
}
}
console.log( supportsWorkerType() );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)