Files
xyzw_web_helper/MD说明文件夹/功能调整-取消数据压缩保留完整详情v3.11.23.md
2025-10-17 20:56:50 +08:00

9.6 KiB
Raw Blame History

功能调整 - 取消数据压缩保留完整详情 v3.11.23

版本: v3.11.23
日期: 2025-10-08
类型: 功能调整

调整说明

应用户要求,取消了任务执行详情的数据压缩功能,保留完整的任务执行结果。

用户需求

"详情还是别压缩了,直接显示"

用户希望能够随时查看完整的任务执行详情,而不是压缩后的摘要信息。

修改内容

1. src/stores/batchTaskStore.js

修改前v3.11.16-v3.11.22

/**
 * 压缩已完成任务的数据100并发优化减少内存占用
 */
const compactCompletedTaskData = (tokenId) => {
  const progress = taskProgress.value[tokenId]
  if (!progress) return
  
  // 只压缩已完成或失败的任务
  if (progress.status !== 'completed' && progress.status !== 'failed') {
    return
  }
  
  // 保留关键信息,清理详细数据
  if (progress.result) {
    // 将详细结果替换为简单摘要
    const taskCount = Object.keys(progress.result).length
    progress.result = {
      _compacted: true,
      taskCount,
      summary: `${progress.status === 'completed' ? '成功' : '失败'}${taskCount}个任务)`
    }
  }
  
  // 清理大型错误对象
  if (progress.error && typeof progress.error === 'object') {
    progress.error = String(progress.error.message || progress.error)
  }
  
  batchLog(`🗜️ 已压缩Token ${tokenId} 的任务数据,释放内存`)
}

修改后v3.11.23

/**
 * 简化已完成任务的错误对象100并发优化减少内存占用
 */
const compactCompletedTaskData = (tokenId) => {
  const progress = taskProgress.value[tokenId]
  if (!progress) return
  
  // 只处理已完成或失败的任务
  if (progress.status !== 'completed' && progress.status !== 'failed') {
    return
  }
  
  // 保留完整的 result 数据,不压缩
  // (用户需要查看详细的任务执行结果)
  
  // 只简化大型错误对象,转为字符串
  if (progress.error && typeof progress.error === 'object') {
    progress.error = String(progress.error.message || progress.error)
  }
  
  batchLog(`🔧 已简化Token ${tokenId} 的错误对象`)
}

关键变化

  • 保留完整的 result 数据,不再压缩
  • 仍然简化 error 对象(对象转字符串),防止内存泄漏
  • 调整日志输出,反映实际操作

2. src/components/TaskProgressCard.vue

修改 taskResults 计算属性

修改前

const taskResults = computed(() => {
  if (!props.progress || !props.progress.result) return {}
  
  // 100并发优化检查是否是压缩后的数据
  // 压缩后的数据包含 _compacted 标记,不应该显示为任务详情
  if (props.progress.result._compacted) {
    return {}
  }
  
  return props.progress.result
})

修改后

const taskResults = computed(() => {
  if (!props.progress || !props.progress.result) return {}
  return props.progress.result
})

修改 hasTaskResults 计算属性

修改前

const hasTaskResults = computed(() => {
  // 即使数据被压缩,也应该显示详情按钮(用户可以查看压缩提示)
  if (props.progress?.result?._compacted) {
    return true;
  }
  return Object.keys(taskResults.value).length > 0
})

修改后

const hasTaskResults = computed(() => {
  return Object.keys(taskResults.value).length > 0
})

移除模板中的压缩提示

删除的内容

<!-- 数据已压缩提示 -->
<n-alert
  v-if="progress?.result?._compacted"
  type="info"
  style="margin-bottom: 16px;"
  :show-icon="true"
>
  <template #header>
    <strong>📦 数据已优化压缩</strong>
  </template>
  <div>
    <p style="margin: 0 0 8px 0;">为节省内存已完成任务的详细数据已被压缩</p>
    <p style="margin: 0;">
      <strong>{{ progress.result.summary }}</strong>
    </p>
  </div>
</n-alert>

修改空状态条件

<!-- 修改前 -->
<n-empty
  v-if="!hasTaskResults && !progress?.result?._compacted"
  description="暂无任务执行详情"
/>

<!-- 修改后 -->
<n-empty
  v-if="!hasTaskResults"
  description="暂无任务执行详情"
/>

功能对比

v3.11.16-v3.11.22(压缩版本)

优点

  • 节省内存每个完成的任务节约约80%内存)
  • 100并发时内存占用更低

缺点

  • 任务完成2秒后无法查看详细结果
  • 只能看到摘要:"成功7个任务"
  • 调试和问题排查不便

v3.11.23(完整版本)

优点

  • 随时查看完整的任务执行详情
  • 每个子任务的成功/失败状态清晰可见
  • 便于调试和问题排查
  • 用户体验更好

缺点

  • ⚠️ 100并发时内存占用略高但仍在可接受范围

性能影响评估

内存占用估算

单个Token的 result 数据大小(未压缩):

  • 7个子任务 × 约100字节/任务 = ~700字节
  • 包含对象结构和Vue响应式包装 ≈ 1-2KB

100个Token的总内存增加

  • 100 × 2KB = 200KB
  • 相比之前压缩版本每个Token约200字节
    • 压缩版本总计100 × 200字节 = 20KB
    • 完整版本总计200KB
    • 增加约180KB内存占用

结论

  • 180KB 的内存增加在现代浏览器中完全可以接受
  • 其他优化UI节流、虚拟滚动、禁用动画已经节省了大量性能
  • 用户体验提升远大于这点性能开销

保留的优化

即使取消了数据压缩以下v3.11.16的优化仍然有效:

  1. UI更新节流 - 每800ms批量更新大幅减少渲染次数
  2. 虚拟滚动 - 只渲染可见区域的卡片
  3. 禁用动画 - 批量执行时关闭所有CSS动画
  4. 错误对象简化 - Error对象转为字符串避免内存泄漏
  5. 执行历史限制 - 最多保存10条历史记录

这些优化已经为100并发场景提供了充足的性能保障。

用户体验改进

详情查看体验

现在可以随时查看

点击"详情"按钮后
┌────────────────────────────────────┐
│ 10601服-0-7145... - 任务执行详情    │
├────────────────────────────────────┤
│ ✅ dailyFix          每日修复       │
│    成功                            │
├────────────────────────────────────┤
│ ✅ legionSignIn      俱乐部签到     │
│    成功                            │
├────────────────────────────────────┤
│ ✅ autoStudy         自动学习       │
│    成功                            │
├────────────────────────────────────┤
│ ✅ claimHangupReward 领取挂机奖励   │
│    成功                            │
├────────────────────────────────────┤
│ ✅ addClock          加钟           │
│    成功                            │
├────────────────────────────────────┤
│ ✅ sendCar           发车           │
│    成功,已发车 4 次               │
├────────────────────────────────────┤
│ ✅ climbTower        爬塔           │
│    成功,完成 5 次                 │
├────────────────────────────────────┤
│ 统计信息                           │
│ 总任务数: 7  成功: 7  失败: 0      │
└────────────────────────────────────┘

调试便利性

开发者和高级用户可以:

  • 检查每个子任务的执行结果
  • 查看发车次数、爬塔次数等详细数据
  • 定位具体哪个任务出现问题
  • 复现和报告问题时提供完整信息

技术决策

为什么取消压缩?

  1. 用户价值优先

    • 用户明确表示需要查看详情
    • 完整信息对于任务验证和问题排查至关重要
  2. 性能开销可接受

    • 180KB内存增加微不足道现代浏览器轻松处理
    • 其他优化已经提供充足的性能保障
  3. 简化代码逻辑

    • 移除了 _compacted 标记的复杂判断
    • 减少了特殊情况处理
    • 代码更清晰、更易维护

保留错误对象简化

仍然保留 error 对象的简化处理,因为:

  • Error 对象可能包含大量堆栈信息数KB
  • Error 对象可能形成循环引用,导致内存泄漏
  • 字符串化的错误信息已经足够用于调试
  • 不影响用户查看错误详情

相关版本

  • v3.11.16: 引入数据压缩机制100并发优化
  • v3.11.21: 修复压缩数据显示为失败项
  • v3.11.22: 修复详情按钮隐藏问题
  • v3.11.23: 取消数据压缩,保留完整详情(本版本)

总结

核心改变

  • 📦 取消 result 数据压缩
  • 🔧 保留 error 对象简化
  • 📊 用户可随时查看完整任务详情
  • 性能优化措施仍然有效

用户获益

  • 更好的透明度和可追溯性
  • 更便捷的问题排查
  • 更完整的任务执行信息
  • 无明显性能下降

状态: 已完成
版本: v3.11.23