# 性能优化: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:连接启动时间 ``` 并发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:提高并发数(核心) #### 推荐配置 ```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 + 全面缩短延迟(需测试) **需要我帮您实现具体的代码修改吗?** 🚀