还没使用过Web Worker? 推荐一款开源工具Workerize-Loader,让你在webpack项目中轻松使用Web Worker

Workerize-Loader

将模块及其依赖项移动到 Web 辅助角色的 Web 包加载程序,自动将导出的函数反映为异步代理。

  • 将一个小型、专门构建的 RPC 实现捆绑到应用中
  • 如果导出的模块方法已异步,则签名保持不变
  • 支持同步和异步工作函数
  • 与异步/等待效果优美
  • 导入的值是可实例化的,只是一个装饰Worker

安装

npm install -D workerize-loader

使用

worker.js

// block for `time` ms, then return the number of loops we could run in that time:
export function expensive(time) {let start = Date.now(),count = 0while (Date.now() - start < time) count++return count
}

index.js: (我们的演示)

import worker from 'workerize-loader!./worker'let instance = worker()  // `new` is optionalinstance.expensive(1000).then( count => {console.log(`Ran ${count} loops`)
})

选项

inline

类型:默认值:Booleanfalse

您还可以将工作人员内联为 BLOB 与参数inline

// webpack.config.js
{loader: 'workerize-loader',options: { inline: true }
}

import worker from 'workerize-loader?inline!./worker'

关于Babel

如果您在生成中使用Babel,请确保禁用了公共JS转换。否则,辅助加载程序将无法从辅助角色脚本检索导出函数的列表:

{test: /\.js$/,loader: "babel-loader",options: {presets: [["env",{modules: false,},],]}
}

IE11 需要多填充

Workerize 加载程序支持支持 Web Worker 的浏览器 - 即 IE10+。但是,这些浏览器需要多填充才能使用"承诺",而"工人加载器"所依赖的承诺。建议在全球范围内安装多填充,因为 Webpack 本身也需要承诺加载捆绑包。

最小的实现是我们建议安装的实现:

npm i promise-polyfill

然后,在模块中,您正在"工作",只需将其添加为您的第一次导入:

import 'promise-polyfill/src/polyfill';

所有工作代码现在都可以使用承诺。

测试

若要测试不使用 Webpack 时通常导入的模块,请直接在测试中导入该模块:workerize-loader

-const worker = require('workerize-loader!./worker.js');
+const worker = () => require('./worker.js');const instance = worker();

若要在不使用 Webpack 时测试依赖于工作导入的模块,您需要对测试运行程序进行一些深入探讨。对于 Jest,可以定义一个自定义,该自定义在主线程上模拟辅助加载器:transform

// in your Jest configuration
{"transform": {"workerize-loader(\\?.*)?!(.*)": "<rootDir>/workerize-jest.js"}
}

...然后将填充程序添加到您的项目中:workerize-jest.js

module.exports = {process(src, filename, config, options) {return 'module.exports = () => require(' + JSON.stringify(filename.replace(/.+!/,'')) + ')';},
};

现在,您的测试及其导入的任何模块都可以使用前缀。workerize-loader!

启发

这里的内部工作深受worker-loader启发。值得一读!

许可证

麻省理工学院执照©·米勒

翻译来源:https://github.com/developit/workerize-loader

还没使用过Web Worker? 推荐一款开源工具Workerize-Loader,让你在webpack项目中轻松使用Web Worker相关推荐

  1. 还没使用过Web Worker,推荐一款开源工具Workerize,快速上手

    还没使用过Web Worker,推荐一款开源工具Workerize,快速上手 开源项目:https://github.com/developit/workerize 将模块移动到 Web 辅助角色中, ...

  2. 推荐5大开源工具,用于开发Kubernetes项目

    从无服务器到本地开发,Github上有数以千计的开源工具可供使用.Kubernetes是当今最流行的技术之一. 因此,GitHub上有大量开源库和工具也不足为奇.本文根据流行度.Star数量等综合指标 ...

  3. 2023年推荐几款开源或免费的web应用防火墙

    2023年推荐几款开源或免费的web应用防火墙 2023年,数字经济将强势崛起,并且成为新一轮经济发展的动力,传统的黑客破坏性攻击如CC,转为更隐蔽的如0day进行APT渗透.所以无论私有服务器还是云 ...

  4. 推荐一款开源的ICO制作神器——greenfish

    推荐一款开源的ICO制作神器--Greenfish Icon Editor Pro 关于ICO格式做软件图标时,为什么有时候图标太小,且不清晰,看这篇文章就会茅塞顿开. 制作一个标准 ICO 图标 - ...

  5. 解决“Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer”问题

    转载自   解决"Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer"问题 错误描述 当创建有动态web模块3.0 ...

  6. eclipse导入java web项目_Eclipse中轻松导入web项目的方法

    今天介绍的是Eclipse中轻松导入web项目的方法,相信通过了解Eclipse中轻松导入web项目的操作步骤,大家对Eclipse编程工具一定会有更多的了解的! Eclipse中轻松导入web项目的 ...

  7. 还在用Swagger?我推荐这款零代码侵入的接口管理神器!

    静态的 Swagger 们跟不上频繁变更的代码 "为什么改了这个没告诉我","实际功能和文档上说的不一样啊".这些话大家做开发的想必耳朵都听出老茧了.真不是故意 ...

  8. 还没做2022年计划?这个超赞工具送给你

    又到了一年制定计划的时候了. 你可能要说,每年的计划在年终回顾时,都实现不了,除了发个朋友圈过下瘾,计划还有什么用呢? 这里其实是2个问题: 1.计划如何实现? 2.计划有什么用? 01 对于计划如何 ...

  9. 别说我没告诉你,真心推荐4款免费动画制作软件

    使用最棒的动画软件将帮助您在人群中脱颖而出.此外,它极大地改变了您的工作流程.这个有用的指南包括你应该在 2022 年知道的最好的免费动画软件. 呆猫云桌面将为大家介绍每个软件的所有优点和缺点.它的目 ...

最新文章

  1. python数据库框架_Python数据库及ORM框架对比选择
  2. 两个小模型就能吊打大模型!北大校友、谷歌华人一作「模型集合」,CNN、Transformer都适用!...
  3. 宁‘内卷‘,勿‘躺平‘
  4. 动手动脑——登录界面
  5. char 类型的数组转换到CSting
  6. PHP快速入门教程:for循环
  7. 用Delphi写扬声器音乐
  8. arduino灯光装置_【pinpong库控制硬件】之Arduino uno-调光台灯
  9. 移动视频监控摄像机分类与优势浅析
  10. RHEL/Centos7下使用EPEL和REMI源
  11. 路由器的地址转换功能
  12. 体验下Xcode5与ios7
  13. 汉邦监控录像数据恢复软件---蓝梦软件BestRecoveryForHBMS
  14. 【软考】2019 上半年软件设计师 下午真题及答案
  15. jpg如何缩小kb?jpg图片压缩怎么弄?
  16. 吉他的起源与发展史_吉他的由来与发展简史
  17. opencv 眼部模糊
  18. Python 二次指数平滑法 预测
  19. 新中新电子f200a驱动安装_走班排课,闪亮登场!江门市棠下中学高一年级率先进入“新高考”模式!...
  20. 重回华语乐坛神仙打架的时代——飞利浦S302圈铁耳机评测

热门文章

  1. SpringBoot—集成AOP详解(面向切面编程Aspect)
  2. centos-安装ifconfig
  3. centos-安装pycharm
  4. python-函数-局部变量与全局变量
  5. 数据结构与算法-字典的时间复杂度
  6. django-查询-F对象-Q对象
  7. css-选择器-进阶-属性选择器-组选择器-nth选择器
  8. 面向对象设计的重要原则:SOLID
  9. 实践练习四:迁移 MySQL 数据到 OceanBase 集群
  10. Python MySqlDB 增删改数据库(转载)