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

10 KiB
Raw Permalink Blame History

性能优化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连接启动时间

并发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提高并发数核心

推荐配置

// 根据服务器和网络情况选择

// 激进方案(网络好,服务器强)
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立即可做无需修改代码

  1. 提高并发数

    批量自动化面板 → 并发数量 → 调整为 15-20
    
  2. 减少任务

    - 禁用"一键补差"中不必要的任务
    - 只保留核心任务(签到、答题、发车等)
    
  3. 分批执行

    - 不要一次性运行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分钟
成功率: 很高
风险: 很低

⚠️ 注意事项和风险

高并发风险

  1. 服务器压力

    • 100个同时连接可能触发反爬限制
    • 可能被服务器封禁IP或账号
    • 建议: 分时段执行,避免高峰
  2. 客户端性能

    • 浏览器可能卡顿
    • 内存占用增加每个连接约5-10MB
    • 建议: 关闭其他标签页,确保足够内存
  3. 网络带宽

    • 100个并发需要稳定的网络
    • 上传和下载带宽都要足够
    • 建议: 测试网络速度,确保 >10Mbps
  4. 成功率下降

    • 高并发可能导致超时增加
    • 重试机制会延长总时间
    • 建议: 启用自动重试设置3-5轮

监控指标

在运行100并发时重点监控

// 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
  • [性能优化-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 + 全面缩短延迟(需测试)

需要我帮您实现具体的代码修改吗? 🚀