worker-tls
Version:
worker-tls 提供了 动态Worker 功能 和 其它一些 Worker 场景下有用的工具集;让开发者可以像调用对象方法一样动态地调用Worker中的方法,也可以随时地往 Worker 中动态地添加函数 等等。
49 lines (28 loc) • 2.35 kB
Markdown
[动态Worker内部机制]: ./assets/动态Worker内部机制.png
**目录:**
<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=true} -->
<!-- code_chunk_output -->
1. [概念](#概念)
2. [内部机制](#内部机制)
3. [注意事项](#注意事项)
<!-- /code_chunk_output -->
----------
# 概念
通过动态 Worker,你可以调用 Worker 中的全局函数,也可以访问 Worker 中的全局数据(全局变量里存放的不是函数类型的值),我把这些都称为 Worker 中的 **命令**;其中,全局函数 称为 **函数式命令**,全局数据 称为 **数据式命令**。
我把这种可在运行时往 Worker 中添加命令的机制叫做 **动态Worker** 机制。
`DynamicWorker` 类 是 动态Worker 机制的客户端实现,`createDynamicWorker()` 返回的是 `DynamicWorker` 类的代理 `Proxy` 对象,为方便起见,在不引起歧义的情况下,也可称该代理对象 为 动态Worker 对象。
# 内部机制
![动态Worker内部机制][]
# 注意事项
因为:
- 在函数是被复制到 Worker 中后,是在 Worker ,这个函数引用的外部变量并不会自动被传递;
- 函数是被复制在了 Worker 中的全局环境变量中;
所以:
- 如果函数内部引用了函数作用域之外的外部变量,则也需要在 Worker 的全局环境中添加 函数引用到的所有外部变量,否则,会在运行时报错;
所以:
- 如果函数引用了外部的变量,则 该函数 及其 引用到的外部变量 都需要添加到 Worker 中;
其它特性:
- 在使用 `createDynamicWorker()` 创建 动态Worker 时,会自给 `named` 选项中的命令在 动态Worker对象上 生成相应的快捷命令;
- 在第一次向动态Worker的代理对象上访问某个命令时,如果该动态Worker对象上不存在该命令的快捷命令,则会在该动态Worker对象上自动添加对应的快捷命令;
- 快捷命令的返回值总是异步的。
- 命令的返回结果可以是异步的(如:`Promise`),也可以是流(如:`ReadableStream`),也可以是 `Promise` 和 流的相互组合,如:异步的流 `Promise<ReadableStream>`,数据块是 `Promise<any>`的流 `ReadableStream<Promise<any>>`,或 数据块是异步的异步流 `Promise<ReadableStream<Promise<any>>>`;