asai-js-as 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# asai-js-as — Web Worker 多线程任务管理
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
`asai-js-as` 是一个**Web Worker 多线程任务管理器**,提供基于浏览器的多线程任务队列调度能力。它自动根据设备的硬件并发数创建 Worker 池,支持任务排队、并发执行和 Promise 化结果处理,适用于计算密集型任务的后台执行场景。
|
|
6
|
+
|
|
7
|
+
## 功能
|
|
8
|
+
|
|
9
|
+
- 🧵 **多 Worker 池管理**:自动根据 `navigator.hardwareConcurrency` 创建适量 Worker
|
|
10
|
+
- 📋 **任务队列**:待执行任务自动排队,空闲 Worker 自动拾取
|
|
11
|
+
- 🔄 **Worker 复用**:避免频繁创建/销毁 Worker 实例
|
|
12
|
+
- 🔗 **Promise 化 API**:所有任务调用返回 Promise,支持 async/await
|
|
13
|
+
- 🆔 **任务追踪**:每个任务分配唯一 ID,支持结果映射
|
|
14
|
+
|
|
15
|
+
## 文件结构
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
asai-js-as/
|
|
19
|
+
├── AsaiJsAs.ts # Worker 任务管理器主类(约 150 行)
|
|
20
|
+
└── README.md
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 核心 API
|
|
24
|
+
|
|
25
|
+
### AsaiWorker 类
|
|
26
|
+
|
|
27
|
+
| 构造函数参数 | 类型 | 默认值 | 说明 |
|
|
28
|
+
|-------------|------|--------|------|
|
|
29
|
+
| `workerScript` | `string` | — | Worker 脚本文件路径 |
|
|
30
|
+
| `maxWorkers` | `number` | `navigator.hardwareConcurrency \|\| 4` | 最大 Worker 数量 |
|
|
31
|
+
|
|
32
|
+
### 实例方法
|
|
33
|
+
|
|
34
|
+
| 方法 | 说明 |
|
|
35
|
+
|------|------|
|
|
36
|
+
| `execute(taskData)` | 提交任务数据,返回 `Promise<any>`,Worker 空闲后自动执行 |
|
|
37
|
+
|
|
38
|
+
### 内部机制
|
|
39
|
+
|
|
40
|
+
- **任务队列**:`taskQueue` 数组存储等待执行的任务
|
|
41
|
+
- **Worker 管理**:`workers` Map 存储 Worker 实例及其忙碌状态
|
|
42
|
+
- **任务映射**:`taskMap` Map 通过任务 ID 关联 Promise 的 resolve/reject
|
|
43
|
+
|
|
44
|
+
## 使用示例
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
// 1. 创建 Worker 管理器
|
|
48
|
+
const worker = new AsaiWorker('/workers/my-worker.js');
|
|
49
|
+
|
|
50
|
+
// 2. 提交任务(自动排队执行)
|
|
51
|
+
const result = await worker.execute({ type: 'process', data: largeArray });
|
|
52
|
+
console.log('处理结果:', result);
|
|
53
|
+
|
|
54
|
+
// 3. 批量提交(自动并发执行,限制为 maxWorkers 个同时运行)
|
|
55
|
+
const tasks = [1, 2, 3, 4, 5].map(n =>
|
|
56
|
+
worker.execute({ id: n, payload: `task-${n}` })
|
|
57
|
+
);
|
|
58
|
+
const results = await Promise.all(tasks);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 技术细节
|
|
62
|
+
|
|
63
|
+
- **浏览器兼容**:基于标准 Web Worker API,支持所有现代浏览器
|
|
64
|
+
- **自动并发控制**:Worker 数量上限为 `navigator.hardwareConcurrency`,避免过多线程导致主线程卡顿
|
|
65
|
+
- **懒创建**:Worker 在需要时才被创建,不是启动时全部创建
|
|
66
|
+
- **自动任务拾取**:每个 Worker 完成当前任务后自动从队列中获取下一个任务
|
|
67
|
+
|
|
68
|
+
## 注意事项
|
|
69
|
+
|
|
70
|
+
1. Worker 脚本需同源或通过 `blob:` URL 加载
|
|
71
|
+
2. `maxWorkers` 不宜设置过大,建议使用默认值(CPU 核心数)
|
|
72
|
+
3. 每次 `execute()` 调用在 Worker 内部通过 `postMessage` 传递数据,大数据量需考虑序列化开销
|