Javascript 功能检测模块对 Web Workers 的支持

2023-11-30

从 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(使用前将#替换为@)

Javascript 功能检测模块对 Web Workers 的支持 的相关文章

随机推荐

  • gdb 拆分视图与代码

    我刚刚在 gdb 中调试一个程序 不知怎的 我发现了一个我以前从未见过甚至听说过的新功能 一个分割视图 除了给出命令之外 我还可以在其中查看和浏览代码 这是什么 我做了什么 或者更具体地说 如何才能再次获得这种分屏模式 这种模式有名称吗 或
  • 我应该在 Visual Studio 中强制转换 void** return 吗

    我用 Visual Studio 9 0 2008 编译了一些代码 行为符合预期 但是当我分配一些带有一些手工制作的二维数组时 函数时 Visual Studio 会生成一些 C4133 警告 void alloc 2d int w int
  • 使用 Retrofit/OkHttp 的 Authenticator 时如何防止并行刷新令牌请求?

    我刚刚偶然发现一个问题 我开始向我构建的后端服务器发送过于并行的刷新令牌请求 这导致了并发问题 其中存在竞争条件 所有这些并行请求同时请求和更新不同的刷新令牌 我想到的唯一解决方案是使用 StateFlow Channel 和无作用域 IO
  • String.Empty 和 ""(空字符串)有什么区别?

    在 NET中 有什么区别String Empty and 它们是否可以互换 或者是否存在一些围绕平等的潜在参考或本地化问题String Empty会保证没有问题吗 In NET prior to version 2 0 creates an
  • 如何用 C# 编写代码以在我的机器上获取直接 X 版本? [复制]

    这个问题在这里已经有答案了 我想知道当用户单击菜单项时他应该能够知道他的机器上安装的直接X版本 我想在 VS2008 中用 C 编写这个代码 我应该在菜单项点击事件中写什么 我是 C 初学者 所以不知道从哪里开始 有人可以帮忙吗 谢谢 这可
  • 在设备上安装应用程序后的 Android 通知 - 如何?

    我想为我的 Android 应用程序添加状态栏通知 安装应用程序后 此通知应显示在状态栏上 我有一个应用程序后台服务 我可以在其中放置通知代码 如何仅在安装应用程序后触发通知 任何解决这个问题的见解都会非常有帮助 Thanks 该规则有一个
  • 在 Byte[] 中创建后检索我的号码

    我想在 Byte 中创建一个基本数字后检索它 public static void main String args throws IOException LinkedList
  • 为什么正则表达式在 Javascript 中使用“match”两次获取值?

    我有以下代码 var str 123 var re 0 9 0 9 2 var found str match re alert found 1 alert found 0 我试图理解为什么 find 0 和 find 1 将包含 123
  • 为什么这个闭包需要内联或“dyn”? `dyn` 在这里做什么?

    我对下面的生命周期发生了什么感到困惑 struct Foo impl Foo fn foo self s str fn main let foo Foo let closure s foo foo s Part 1 error messag
  • 使用 Terraform 创建 Filebeat 配置

    我尝试在使用 Terraform 创建实例后创建 Filebeat 配置文件 resource local file greylogIP content lt
  • ARKit 2 冻结:是 bug 还是我的不幸?

    只有我在 iOS 12 上的 ARKit 中经历了整个场景冻结的情况吗 当您在生成过于密集的点云的空间中使用该应用程序太长时间时 通常会发生这种情况 经过一定时间后 整个图片开始滞后 然后完全停止移动 直到您遮盖相机 或将其远离物体 或重置
  • 目标c中的数组

    我对如何增加 NSLOg 语句下的订单有疑问 例如我的代码是 int anBray 0 5 89 34 9 189 9 18 9 34 89 34 2 600 2 0 int i NSLog Input for i 0 i
  • 仅当“类别”设置时,Django 才会进行过滤!

    我怎样才能做到这一点 如果设置了请求 我只会过滤哪些内容 前任 如果未设置性别 则过滤器将为 Test objects filter 类别 类别 品牌 品牌 def index request gender request GET get
  • 使用用户输入值进行计算时出现类型错误

    我知道这个问题已经得到解答 但我是一个超级菜鸟 我知道这与男性 女性作为字符串有关 但我认为我已经定义了它 我怎样才能让计算工作 num int input Please enter number of standard drinks co
  • 为什么 C++ 编译器不能知道指针指向派生类?

    我刚刚开始学习 C 中的 OOP 我想知道为什么需要 virtual 关键字来指示编译器进行后期绑定 为什么编译器在编译时无法知道指针指向派生类 class A public int f return A class B public A
  • 具有多个可执行文件的 CMake 共享库

    我的项目包含多个共享一些通用代码的可执行文件 我想将通用代码放在可执行文件可以链接到的静态库中 公共代码非常小 我不喜欢处理共享库 源树看起来像这样 project CMakeLists txt common CMakeLists txt
  • Rust 中的冒号运算符与 C 中的冒号运算符有何相似之处? [复制]

    这个问题在这里已经有答案了 如何在 Rust 中表示这种代码 uint8 t pmport 4 uint8 t rsv0 3 uint8 t c 1 我想将这 3 个值打包成一个u8 在 Rust 中如何实现这一点 Rust 不像 C 语言
  • 在ffmpeg中添加无声音频

    我正在尝试使用 ffmpeg 将无声音轨添加到 MOV 文件中 我创建了一个比视频长的无声音轨 并打算在 ffmpeg 中使用 shortest 选项 使用 SoX v14 3 1 我运行它来生成一个 wav 文件 sox n r 4410
  • 请帮助我理解 ASP.NET 控件的 AutoPostBack 属性

    我正在学习 ASP NET 主要是通过阅读一本书 但同时也努力实际做一些事情 但是 我遇到了关于列表控件的解释 但我不明白 它是这么说的 在智能任务面板的上下文中 最后一个选项设置控件的 AutoPostBack 属性 选中此选项后 一旦用
  • Javascript 功能检测模块对 Web Workers 的支持

    从 Chrome 80 开始 您可以使用以下命令创建模块类型工作人员new Worker worker js type module 然后使用模块功能 例如import在工人脚本中 然而其他浏览器仍在努力支持这一点 因此使用它需要功能检测和