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