小程序worker的使用
JavaScript 线程
JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。
Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(通常负责 UI 交互)就会很流畅,不会被阻塞或拖慢。
Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。
多线程 Worker
一些异步处理的任务,可以放置于 Worker 中运行,待运行结束后,再把结果返回到小程序主线程。Worker 运行于一个单独的全局上下文与线程中,不能直接调用主线程的方法。
Worker 与主线程之间的数据传输,双方使用Worker.postMessage() 来发送数据,Worker.onMessage()来接收数据,传输的数据并不是直接共享,而是被复制的。
使用流程
1. 配置 Worker 信息
在 app.json 中可配置 Worker 代码放置的目录,目录下的代码将被打包成一个文件:
配置示例:
{
“workers”: “workers”
}

- 添加 Worker 代码文件
其实最主要的就是workers/request/index.js,这个文件一定要有,是创建worker的依据,其他文件只是辅助来处理复杂的逻辑。
根据步骤 1 中的配置,在代码目录下新建以下两个入口文件:
workers/request/index.js
workers/request/utils.js
workers/response/index.js
添加后,目录结构如下:
├── app.js
├── app.json
├── project.config.json
└── workers
├── request
│ ├── index.js
│ └── utils.js
└── response
└── index.js

- 编写 Worker 代码
在 workers/request/index.js编写 Worker 响应代码。比如这边处理了arraybuffer转成pngdata的过程,正常这个过程耗时要2秒以上。处理完成后,postmessage给主线程。// 将ArrayBuffer 转为base64位 const upng = require('./UPNG.js'); worker.onMessage((msg) => { if (msg.buffer) { try { const pngData = upng.encode([msg.buffer], msg.width, msg.height, 16, 0); worker.postMessage({ buffer: pngData }) } catch (error) { console.log('upng.encode error'); } } })
- 在主线程中初始化 Worker
在主线程的代码 app.js 中初始化 Worker
const worker = wx.createWorker(‘workers/request/index.js’) // 文件名指定 worker 的入口文件路径,绝对路径worker = wx.createWorker('/workers/request/index.js'); worker.onMessage((msg) => { if (msg.buffer) { const image = wx.arrayBufferToBase64(msg.buffer); this.easyAr(image); } })

- 主线程向 Worker 发送消息
worker.postMessage({ buffer, width, height });

注意事项
Worker 最大并发数量限制为 1 个,创建下一个前请用 Worker.terminate() 结束当前 Worker
Worker 内代码只能 require 指定 Worker 路径内的文件,无法引用其它路径
Worker 的入口文件由 wx.createWorker() 时指定,开发者可动态指定 Worker 入口文件
Worker 内不支持 wx 系列的 API
Workers 之间不支持发送消息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-08-22 11.SpringMVC上传文件
2016-08-22 9.SpringMVC和json结合传递数据 && 10.SpringMVC获取controller中json的数据
2016-08-22 9.SpringMVC和json结合传递参数