合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
游戏默认每16ms刷新一次屏幕,若主线程在16ms内出现耗时任务,将不能及时刷新游戏画面,导致游戏画面不流畅、用户体验不佳,因此建议开发者把耗时任务放置在Worker子线程中运行,这种异步处理方式将大大提高游戏程序的运行流畅度。
Worker子线程与主线程在执行任务方式、通信方式均采用异步方式:

快游戏的Worker子线程、主线程与Web Worker存在差异,在能力的体现上对比如下:
| 能力 | 快游戏Worker子线程 | 快游戏主线程 | Web Worker |
|---|---|---|---|
| 渲染能力 |
|
|
|
| JS(qg) API |
|
|
|
| 网络I/O |
|
|
|
| JS 运行时 |
|
|
|
| 计时器 |
|
|
|
| JIT |
|
| - |
| 引擎能力 |
|
| - |
| 并发数量 | 不能超过1个 | - | 无限制 |
| 线程通信数据传输方式 | 结构化克隆 | - | 结构化克隆/可转移对象 |
| 线程通信数据传输类型 | JS对象类型及基本类型 | - | JS对象类型及基本类型 |
- workers/index.js
- ├── game.js
- ├── manifest.json
- └── workers // 存放Worker脚本的目录,支持放置JS文件,例如Worker脚本及其require脚本;不支持放置图片、视频等静态文件。
- └── index.js
- {
- "workers": {
- "path": "workers", // 必选,指定Worker脚本的相对路径
- }
- }
- worker.terminate()
- const worker = qg.createWorker('workers/index.js')
Worker子线程不支持qg开头的快游戏API接口。
- // 主线程向Worker线程发送消息
- // worker是主线程调用qg.createWorker接口返回的对象
- worker.postMessage({
- msg: 'hello from main'
- })
-
- // Worker线程向主线程发送消息
- // 在Worker子线程中,worker是全局变量
- worker.postMessage({
- msg: 'hello from worker'
- })
- // 主线程接收Worker线程发送的消息
- // worker是主线程调用qg.createWorker接口返回的对象
- worker.onMessage((message) => {
- console.log(`received message from worker: ${message}`)
- })
-
- // Worker线程接收主线程发送的消息
- // 在Worker子线程中,worker是全局变量
- worker.onMessage((message) => {
- console.log(`received message from main: ${message}`)
- })