uni-app下Worker的使用

1、在static目录下创建一个目录用于存放worker文件

为啥要在static目录下创建worker目录呢?那是因为worker.js没办法在别的js中被引用,uni-app项目编译成微信小程序代码时会进行Tree-shaking(摇树优化),把那些没被引用的js文件给剔除掉,放在static目录下可以避免被摇树优化。

2、在pages.json文件中引用刚创建的worker目录


注意:pages.json最后一项后面不要有逗号,否则会报错

3、编写worker.js(名字任意取,要在上面创建的workers目录下面)
js 复制代码
//MyWorker.js
//用于接收外部消息
worker.onMessage(function(res) {
	console.log('worker内部线程')
	console.log(res)
	//用于发送
	worker.postMessage({
		message: '收到worker的消息'
	});
});
4、主线程中创建调用和销毁Worker

1、创建Worker

js 复制代码
let worker = wx.createWorker('/static/workers/MyWorker.js', {
	useExperimentalWorker: true,
});

useExperimentalWorker: true 引用官方注释:是否使用实验worker。在iOS下,实验worker的JS运行效率比非实验worker提升近十倍,如需在worker内进行重度计算的建议开启此选项。同时,实验worker存在极小概率会在系统资源紧张时被系统回收,因此建议配合 worker.onProcessKilled 事件使用,在worker被回收后可重新创建一个。

2、发送消息给Worker线程

js 复制代码
worker.postMessage({message:'主线程发来的消息'})

注:需要发送的消息,必须是一个可序列化的 JavaScript key-value 形式的对象。

3、监听Worker线程的消息

js 复制代码
worker.onMessage((res)=>{
	console.log('主线程打印的')
	console.log(res)
})

4、结束当前Worker线程(仅限在主线程 worker 对象上调用)

java 复制代码
worker.terminate()
5、Worker中如何引入其他js

被引入的js文件必须要放在上面创建的Worker目录内部,不然无法引用

在刚创建的workers文件夹下创建一个Test.js文件

java 复制代码
//Test.js
function test(){
	console.log('我是外部js文件中的内容')
}
export default{
	test
}

MyWorker.js中引入该js

js 复制代码
import Test from 'Test.js'
//用于接收外部消息
worker.onMessage(function(res) {
	console.log('worker内部线程')
	console.log(res)
	Test.test();//调用其他js文件中的代码
	//用于发送
	worker.postMessage({
		message: '收到worker的消息'
	});
});

打印结果:

使用worker注意事项:
  • Workers 之间不支持发送消息。
  • Worker 的入。口文件由 wx.createWorker() 时指定,开发者可动态指定 Worker 入口文件
  • Worker 内代码只能 require 指定 Worker 路径内的文件,无法引用其它路径。
  • Worker 最大并发数量限制为 1 个,创建下一个前请用 Worker.terminate() 结束当前 Worker。
  • Worker 内不支持 wx 系列的 API。
相关推荐
andr_gale18 小时前
02_uniapp自定义上凸效果的底部TabBar
前端·javascript·uni-app·移动端
不爱说话郭德纲1 天前
uni-app x iOS 扫码模糊怎么办?AVFoundation 灰尘级别摄像头助你超广角聚焦
前端·uni-app·app
CHB2 天前
uni-app x 蒸汽模式 性能测试基准报告 Benchmark【Android版】
android·ios·uni-app
游戏开发爱好者84 天前
系统状态:专为iPhone和iPad设计的实时系统性能监控工具全面介绍
android·ios·小程序·uni-app·iphone·webview·ipad
2501_915909064 天前
全面解析iOS应用上架到App Store的完整流程与关键注意事项
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915106324 天前
iOS 证书类型及作用说明 账号证书与签名配置的完整解读
android·ios·小程序·https·uni-app·iphone·webview
2501_916008895 天前
移动安全之 APP 加固,保障移动应用安全的重要手段
安全·macos·ios·小程序·uni-app·iphone·xcode
2501_915106325 天前
Python爬虫从零开始:七天掌握HTTP协议、数据解析与反爬策略
android·ios·小程序·https·uni-app·iphone·webview
90后的晨仔5 天前
uni-app 项目目录结构全解:每个文件、每个文件夹的作用与配置详解
vue.js·uni-app
爱看老照片5 天前
关于uniapp中单位rpx的注意点
uni-app·rpx