[教程]: ./doc/教程.md
[API接口文档]: ./doc/api/index.md
[动态Worker的设计与机制]: ./doc/动态Worker的设计与机制.md

[GitHub仓库]: https://github.com/GuoBinyong/worker-tls
[发行地址]: https://github.com/GuoBinyong/worker-tls/releases
[issues]: https://github.com/GuoBinyong/worker-tls/issues

[码云仓库]: https://gitee.com/guobinyong/worker-tls



**目录：**  

<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=true} -->

<!-- code_chunk_output -->

1. [背景](#背景)
2. [简介](#简介)
3. [安装方式](#安装方式)
    1. [方式1：通过 npm 安装](#方式1通过-npm-安装)
    2. [方式3：通过`<script>`标签引入](#方式3通过script标签引入)
4. [教程](#教程)
5. [API接口文档](#api接口文档)

<!-- /code_chunk_output -->


--------

# 背景
在创建 `Worker` 时，总是需要提被运行代码的脚本文件的 url，这使得会有如下诸多不便：
+ 需要把在 `Worker` 中运行的代码放在一个独立的文件中。
+ 如果项目需要构建，还需要为这些在 `Worker` 中运行的文件配置专门的构建策略；
+ 如果你开发的是一个工具库，那 `Worker` 代码的构建包还不能直接在项目中引用，你和使用该工具库的用户还需要做以下操作，才能保存工具库正常运行：
   1. 你和用户事先约定好以下内容：
      - npm包中存放 `Worker` 代码的目录；
      - 运行时，用户如何告诉你  Worker 代码 路径；
   2. 从 `node_modules` 中找到工具库的包；
   3. 将包中约定位置 下的 Worker 代码包拷贝到用户项目中不会被构建的目录中（比如：`public`）； 
   4. 用户将刚拷出来的 Worker 代码包 的运行时路径通过 `第1步` 中约定的方式告诉工具库；
   5. 当工具库更新时，用户需要重新执行下上面的步骤；

除此之外，Worker 的事件通信机制使得：
+ 在 TypeScript 场景中，`Worker` 之间传递数据的类型不明确；
+ Worker 之间不能像对象一样，互相调用对方的API；
+ 不能动态地往 Worker 中添加新的任务，或 删除旧的任务；
+ 等等

`worker-tls` 中的 动态Worker 就可以完全解决这些问题！

除了 动态Worker 之外，`worker-tls` 还为深度定制 Worker 提供了一些有用的工具方法。


# 简介
`worker-tls` 提供了 动态Worker 功能 和 其它一些 Worker 场景下有用的工具集；让开发者可以像调用对象方法一样动态地调用Worker中的方法，也可以随时地往 Worker 中动态地添加函数 等等。

**具有以下特性：**  
- 像调用对象方法一样调用Worker中的API；
- 不需要特殊的构建就能使用 Worker；
- 可以动态地向 Worker 中添加函数，就像给对象添加方法一样简单；
- 可以动态地移除 Worker 中的函数，就像移除对象的方法一样简单；
- 完善的 TypeScript 类型提示；
- 运行时自动完善快捷命令；
- 支持 流、Promise 及其深层嵌套；
- 支持 专用Worker 和 共享Worker `SharedWorker`
- 支持 worker 池：只需要传递一个数字，就可以创建一个 worker 池，并会自动地分配任务给 worker 池中的 worker 去执行；

**详情请看：**  
- 主页：<https://github.com/GuoBinyong/worker-tls>
- [GitHub仓库][]
- [码云仓库][]
- [教程][]
- [动态Worker的设计与机制][]
- [API接口文档][]


**如果您在使用的过程中遇到了问题，或者有好的建议和想法，您都可以通过以下方式联系我，期待与您的交流：**
- 给该仓库提交 [issues][]
- 给我 Pull requests
- 邮箱：<guobinyong@qq.com>
- 微信：keyanzhe





# 安装方式
目前，安装方式有以下几种：


## 方式1：通过 npm 安装
通过 npm （或 yarn、pnpm 等包管理器）安装
```shell
npm install worker-tls
```




## 方式3：通过`<script>`标签引入
您可直接从项目的 [发行地址][] 中下载以 `.iife.js` 作为缀的文件，然后使用如下代码引用 和 使用 worker-tls：


1. 引用 worker-tls
   ```html
   <script src="path/to/package/worker-tls.iife.js"></script>
   ```
   
2. 使用全局的 `WorkerTls`
   ```html
   <script>
   // 使用全局的 WorkerTls
   </script>
   ```

# 教程
- 简单入门，请看[教程][]
- 如果想深入原理，请看[动态Worker的设计与机制][]

# API接口文档
详情跳转至[API接口文档][]