# 多线程 Worker
通常情况下,所有的 ECMAScript 程序都是运行在 JSKit App 的主线程。worker
模块参考 Web Workers (opens new window) 实现了Web Worker API
的一个子集,提供了 ECMAScript 多线程执行能力。
提示
JSKit 的 Worker
和 Web Workers
实现稍有不同。请注意区别。
警告
不要在 worker
线程里执行 UI 相关的操作,可能会导致崩溃。
Worker 接口一般涉及到两个 ECMAScript 脚本:一个运行在主线程;另一个运行在工作线程。
# 主线程引入
Worker 模块需要显示的导入:
import Worker from 'worker';
# 构造 Worker 对象
constructor(moduleId)
moduleId
模块ID,运行在 worker 线程的 ES 模块名。- Returns: 返回 Worker 对象
const worker = new Worker('./worker')
# 发送消息到 worker 线程
postMessage(req)
req
发送到 worker 线程的消息数据。
注意
当下,在 JSKit 内部,是通过 JSON 序列化 data 对象在 worker 与主线程之间传输的。
# 接收来自 worker 线程消息
通过重写 worker 的 onMessage(resp) 方法接收来自 worker 线程的消息。
worker.onMessage(resp)={
//handle resp
}
# worker 线程处理
模块 ./worker.js
中可通过一个全局变量 self
访问到 worker 实例。与主线程的消息接收类似,可通过 onMessage
来接收来自主线程的数据:
self.onMessage(req)={
//handle req
}
# worker 线程向主线程发送消息
self.postMessage(resp)
resp
发送到主线程的消息数据。
# 结束 worker
在主线程的 worker
对象和 Worker 线程里的 self
对象上,都有一个 terminate
函数,Worker线程可在需要时通过 worker.terminate()
被动地,或通过 self.terminate()
主动地结束 Worker 。
警告
不要在 terminate
之后继续执行任何 js
代码。
# Demo
在我们的官方示例库中提供了一个 worker 相关接口的简单用例: worker-demo0
。可在 JSKit App 首页的右上角菜单订阅仓库
中查找并安装体验。
← MQTT 5 客户端 文件 File →