Files
xyzw_web_helper/MD说明文件夹/性能优化-100并发优化方案v3.11.8.md
2025-10-17 20:56:50 +08:00

477 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 性能优化100并发优化方案 v3.11.8
## 📋 文档时间
2025-10-08
## 🎯 优化目标
针对**100个token并发**的批量自动化,提供全面的性能优化方案。
## 📊 当前配置分析v3.11.7
### 当前配置参数
```javascript
// 并发控制
maxConcurrency: 5 (默认) // ⚠️ 太低
// 连接配置
连接间隔: 500ms
连接稳定等待: 2000ms
任务间隔: 500ms
// 超时配置
一键补差子任务: 1000ms
发车任务: 1000ms
爬塔任务: 2000ms
```
### 100并发的问题分析
#### 问题1并发数过低
```
当前并发: 5
100个token需要: 100 ÷ 5 = 20批
每批平均时间: 约30-40秒
总计时间: 20 × 35秒 ≈ 11-12分钟 ⚠️ 太慢
```
#### 问题2连接启动时间
```
并发5100个token需要20批
每批启动时间: 5 × 0.5秒 + 2秒稳定 = 4.5秒
20批总启动时间: 20 × 4.5秒 = 90秒 ⚠️ 仅启动就要1.5分钟
```
#### 问题3内存和CPU压力
```
100个WebSocket连接
+ 每个token的任务状态
+ 每个token的执行进度
+ Vue响应式数据更新
= 较高的内存和CPU占用 ⚠️
```
---
## ✅ 优化方案(五大维度)
### 🚀 方案1提高并发数核心
#### 推荐配置
```javascript
// 根据服务器和网络情况选择
// 激进方案(网络好,服务器强)
maxConcurrency: 20-30
// 平衡方案(推荐)
maxConcurrency: 15-20
// 保守方案(网络一般)
maxConcurrency: 10-15
```
#### 效果对比
| 并发数 | 批次 | 启动时间 | 任务时间 | 总时间 |
|--------|------|---------|---------|--------|
| **5** | 20批 | 90秒 | 600秒 | **约11分钟** |
| **10** | 10批 | 45秒 | 300秒 | **约5.5分钟** ⬇️ |
| **15** | 7批 | 32秒 | 210秒 | **约4分钟** ⬇️ |
| **20** | 5批 | 23秒 | 150秒 | **约2.8分钟** ⬇️ |
| **30** | 4批 | 18秒 | 120秒 | **约2.3分钟** ⬇️ |
**修改方法:**
在批量自动化面板的并发设置中,将滑块调整到 **15-20**
---
### ⚡ 方案2优化连接配置
#### 当前配置问题
```javascript
// 问题每个token启动后等待2秒
await new Promise(resolve => setTimeout(resolve, 2000))
// 100个token × 2秒 = 200秒浪费在等待上
```
#### 优化建议A缩短稳定等待激进
```javascript
// 修改为1秒或更短
await new Promise(resolve => setTimeout(resolve, 1000))
// 节省: 100个token × 1秒 = 100秒
```
**风险:** 可能导致连接不稳定,需要测试
#### 优化建议B并行稳定等待推荐
```javascript
// 不等待2秒直接开始任务利用并发优势
// 因为同时运行多个token等待时间可以重叠
// 修改思路:
// 1. 连接成功后不等待
// 2. 第一个任务前等待500ms即可
// 3. 利用并发实现等待时间重叠
```
---
### 🔧 方案3优化任务执行
#### 3.1 减少不必要的延迟
**当前配置:**
```javascript
任务间隔: 500ms
一键补差子任务后: 200ms
盐罐任务后: 500ms
```
**优化建议:**
```javascript
// 对于100并发可以缩短延迟
任务间隔: 300ms // 减少200ms
一键补差子任务后: 100ms // 减少100ms
盐罐任务后: 300ms // 减少200ms
// 100个token节省: 约20秒
```
#### 3.2 并行任务优化
**当前:** 所有任务串行执行
**优化:** 部分独立任务可以并行
```javascript
// 例如:
// 并行执行:签到 + 答题 + 领奖
// 而不是:签到 → 答题 → 领奖
```
---
### 💾 方案4优化内存和性能
#### 4.1 限制UI更新频率
```javascript
// 问题100个token频繁更新UI会卡顿
// 优化:节流更新,减少渲染压力
// 建议:
// 1. 任务进度更新节流每500ms更新一次
// 2. 统计信息更新节流每1秒更新一次
// 3. 日志更新批量处理
```
#### 4.2 虚拟滚动
```javascript
// 问题100个token卡片同时渲染很卡
// 优化:使用虚拟滚动,只渲染可见区域
// 建议:
// 1. 实现虚拟列表
// 2. 只渲染屏幕可见的15-20个卡片
// 3. 其他卡片按需加载
```
#### 4.3 禁用动画
```javascript
// 在批量任务执行时禁用CSS动画
// 减少GPU和CPU占用
```
---
### 🌐 方案5网络和服务器优化
#### 5.1 请求队列管理
```javascript
// 当前:所有请求立即发送
// 优化:实现请求队列,避免瞬时高峰
// 建议:
// 1. 限制同时进行的WebSocket请求数
// 2. 实现请求优先级(关键任务优先)
// 3. 失败请求延迟重试,不阻塞队列
```
#### 5.2 连接池管理
```javascript
// 优化WebSocket连接复用
// 减少连接建立和断开的开销
```
---
## 🔧 具体实施步骤
### 步骤1立即可做无需修改代码
1. **提高并发数**
```
批量自动化面板 → 并发数量 → 调整为 15-20
```
2. **减少任务**
```
- 禁用"一键补差"中不必要的任务
- 只保留核心任务(签到、答题、发车等)
```
3. **分批执行**
```
- 不要一次性运行100个
- 分成 2-3批每批30-50个
```
### 步骤2代码优化需修改
#### 2.1 缩短连接稳定等待(简单)
修改 `src/stores/batchTaskStore.js` 第346-348行
```javascript
// 当前
await new Promise(resolve => setTimeout(resolve, 2000))
// 修改为100并发推荐
await new Promise(resolve => setTimeout(resolve, 500))
```
**效果:** 节省100个token × 1.5秒 = 150秒
#### 2.2 缩短任务间隔(简单)
修改 `src/stores/batchTaskStore.js` 第401行
```javascript
// 当前
await new Promise(resolve => setTimeout(resolve, 500))
// 修改为100并发推荐
await new Promise(resolve => setTimeout(resolve, 200))
```
**效果:** 每个token节省约3秒
#### 2.3 缩短子任务延迟(中等)
在一键补差的各个子任务后将延迟从200ms改为100ms
**效果:** 每个token节省约5秒
---
## 📊 优化效果预估
### 方案对比100个token
| 方案 | 并发数 | 优化点 | 预估时间 | 对比现状 |
|------|--------|--------|---------|---------|
| **现状** | 5 | 无优化 | 11分钟 | - |
| **方案A** | 15 | 仅提高并发 | 4分钟 | **节省7分钟** ⬇️ |
| **方案B** | 20 | 并发+缩短等待 | 2.5分钟 | **节省8.5分钟** ⬇️ |
| **方案C** | 20 | 全面优化 | 2分钟 | **节省9分钟** ⬇️ |
| **方案D** | 30 | 激进优化 | 1.5分钟 | **节省9.5分钟** ⬇️ |
### 推荐组合方案
#### 🥇 平衡方案(推荐)
```
并发数: 15-20
连接稳定等待: 500ms
任务间隔: 300ms
子任务延迟: 100ms
预计时间: 2.5-3分钟
成功率: 高
风险: 低
```
#### 🥈 激进方案(网络好时)
```
并发数: 25-30
连接稳定等待: 300ms
任务间隔: 200ms
子任务延迟: 50ms
预计时间: 1.5-2分钟
成功率: 中
风险: 中
```
#### 🥉 保守方案(稳定优先)
```
并发数: 10-12
连接稳定等待: 1000ms
任务间隔: 500ms
子任务延迟: 200ms
预计时间: 4-5分钟
成功率: 很高
风险: 很低
```
---
## ⚠️ 注意事项和风险
### 高并发风险
1. **服务器压力**
- 100个同时连接可能触发反爬限制
- 可能被服务器封禁IP或账号
- **建议:** 分时段执行,避免高峰
2. **客户端性能**
- 浏览器可能卡顿
- 内存占用增加每个连接约5-10MB
- **建议:** 关闭其他标签页,确保足够内存
3. **网络带宽**
- 100个并发需要稳定的网络
- 上传和下载带宽都要足够
- **建议:** 测试网络速度,确保 >10Mbps
4. **成功率下降**
- 高并发可能导致超时增加
- 重试机制会延长总时间
- **建议:** 启用自动重试设置3-5轮
### 监控指标
在运行100并发时重点监控
```javascript
// 1. 连接成功率
目标: >95%
警戒: <90%
// 2. 任务成功率
目标: >90%
警戒: <80%
// 3. 平均执行时间
目标: 2-3分钟
警戒: >5分钟
// 4. 重试触发率
目标: <10%
警戒: >20%
// 5. 浏览器内存占用
目标: <2GB
警戒: >3GB
```
---
## 🧪 测试计划
### 阶段1基础测试并发15
1. 运行15个token
2. 观察成功率和时间
3. 确认无严重问题
### 阶段2中等测试并发25
1. 运行25个token
2. 观察服务器响应
3. 检查是否有限流
### 阶段3满载测试并发30+
1. 运行30-40个token
2. 观察系统稳定性
3. 找到最佳并发数
### 阶段4全量测试100个
1. 分2批运行每批50个
2. 或使用最佳并发数一次运行100个
3. 记录完整数据
---
## 💻 代码修改清单(可选)
如果您需要,我可以帮您实现以下优化:
### 优先级高(建议实现)
- [ ] 缩短连接稳定等待为500ms
- [ ] 缩短任务间隔为300ms
- [ ] 添加并发数快捷预设5/10/15/20/30
- [ ] 优化UI更新频率节流
### 优先级中(可选实现)
- [ ] 缩短一键补差子任务延迟为100ms
- [ ] 实现虚拟滚动token卡片
- [ ] 添加性能监控面板
- [ ] 实现请求队列管理
### 优先级低(高级优化)
- [ ] 部分任务并行执行
- [ ] WebSocket连接池
- [ ] 自适应并发调整
- [ ] 智能重试策略
---
## 📝 快速行动建议
### 立即可做3分钟
1. ✅ 将并发数调整为 **15-20**
2. ✅ 在低峰时段运行
3. ✅ 关闭浏览器其他标签页
### 今天可做15分钟
1. 修改连接稳定等待2000ms → 500ms
2. 修改任务间隔500ms → 300ms
3. 测试50个token
### 本周可做1小时
1. 实现虚拟滚动
2. 优化UI更新频率
3. 添加性能监控
---
## 🔗 相关文档
- [批量自动化-超时延迟配置表v3.11.md](./批量自动化-超时延迟配置表v3.11.md)
- [性能优化-Token连接间隔缩短至500ms v3.11.7.md](./性能优化-Token连接间隔缩短至500ms v3.11.7.md)
- [性能优化-发车超时统一1000ms v3.11.6.md](./性能优化-发车超时统一1000ms v3.11.6.md)
---
## 📈 预期效果总结
| 指标 | 现状 | 优化后 | 改进 |
|------|------|--------|------|
| **总执行时间** | 11分钟 | 2-3分钟 | **快5倍** ⬆️ |
| **启动时间** | 90秒 | 15秒 | **快6倍** ⬆️ |
| **并发效率** | 5个/批 | 20个/批 | **提升4倍** ⬆️ |
| **内存占用** | 中等 | 中高 | 增加20-30% ⚠️ |
| **成功率** | 高 | 中高 | 可能下降5-10% ⚠️ |
**最终建议:**
- 🥇 首选方案并发15-20 + 缩短等待至500ms
- 🥈 备选方案并发10-12 + 保持当前配置
- ⚠️ 激进方案并发25-30 + 全面缩短延迟(需测试)
**需要我帮您实现具体的代码修改吗?** 🚀