多线程 Worker
步骤
配置Worker信息
{ "deviceOrientation": "portrait", "workers": "workers" }
添加 Worker 文件
touch workers/request/index.js touch workers/request/utils.js touch workers/response/index.js
编写 Worker 代码
// worker线程中,无法访问tt全局对象 function fibonacci(n) { console.log("worker show") } worker.onMessage(function (res) { console.log(`worker start`); });
在主线程中初始化线程
// 创建 Worker const worker = tt.createWorker('workers/calculator.js');
在主线程中发送信息给worker
// 向 Worker 发送消息,开始计算 worker.postMessage({ type: 'calculate', payload: 40 });
分包预加载与worker能力的配合
确保在完成一个 Worker 能力后,先关闭该 Worker,再于分包或主线程中启动其他 Worker 能力
worker能力详情请查看worker实例
分包预加载 详情请查看分包加载
在并行执行的任务中,小游戏会静默加载分包预加载任务
开发常见问题
- 1.在某个 Worker 完成任务后,需要手动将线程关闭,调用 Worker.terminate 方法
- 2.分包之间的worker线程遵循同一原则,必须关闭上一个worker线程,才能开启下一个worker
Tips
- 1.Worker线程数量有且只有一个,而且需要在根目录声明并创建game.json,显式声明workers字段
- 2.Worker目录中,不能调用tt系列的 API
- 3.Workers 之间不支持发送消息
- 4.Worker 目录内只支持放置 JS 文件,其他类型的静态文件需要放在 Worker 目录外
- 5.Worker 的入口文件在调用 tt.createWorker 时指定,开发者可动态指定 Worker 入口文件
- 6.Worker 线程是一个独立的运行环境,它无法访问主线程中的 tt 全局对象,分包加载必须在主线程中完成
