324 lines
9.6 KiB
Markdown
324 lines
9.6 KiB
Markdown
|
|
# 功能调整 - 取消数据压缩保留完整详情 v3.11.23
|
|||
|
|
|
|||
|
|
**版本**: v3.11.23
|
|||
|
|
**日期**: 2025-10-08
|
|||
|
|
**类型**: 功能调整
|
|||
|
|
|
|||
|
|
## 调整说明
|
|||
|
|
|
|||
|
|
应用户要求,取消了任务执行详情的数据压缩功能,保留完整的任务执行结果。
|
|||
|
|
|
|||
|
|
### 用户需求
|
|||
|
|
|
|||
|
|
> "详情还是别压缩了,直接显示"
|
|||
|
|
|
|||
|
|
用户希望能够随时查看完整的任务执行详情,而不是压缩后的摘要信息。
|
|||
|
|
|
|||
|
|
## 修改内容
|
|||
|
|
|
|||
|
|
### 1. src/stores/batchTaskStore.js
|
|||
|
|
|
|||
|
|
#### 修改前(v3.11.16-v3.11.22)
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
/**
|
|||
|
|
* 压缩已完成任务的数据(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)
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
/**
|
|||
|
|
* 简化已完成任务的错误对象(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 计算属性
|
|||
|
|
|
|||
|
|
**修改前**:
|
|||
|
|
```javascript
|
|||
|
|
const taskResults = computed(() => {
|
|||
|
|
if (!props.progress || !props.progress.result) return {}
|
|||
|
|
|
|||
|
|
// 100并发优化:检查是否是压缩后的数据
|
|||
|
|
// 压缩后的数据包含 _compacted 标记,不应该显示为任务详情
|
|||
|
|
if (props.progress.result._compacted) {
|
|||
|
|
return {}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return props.progress.result
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后**:
|
|||
|
|
```javascript
|
|||
|
|
const taskResults = computed(() => {
|
|||
|
|
if (!props.progress || !props.progress.result) return {}
|
|||
|
|
return props.progress.result
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 修改 hasTaskResults 计算属性
|
|||
|
|
|
|||
|
|
**修改前**:
|
|||
|
|
```javascript
|
|||
|
|
const hasTaskResults = computed(() => {
|
|||
|
|
// 即使数据被压缩,也应该显示详情按钮(用户可以查看压缩提示)
|
|||
|
|
if (props.progress?.result?._compacted) {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return Object.keys(taskResults.value).length > 0
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后**:
|
|||
|
|
```javascript
|
|||
|
|
const hasTaskResults = computed(() => {
|
|||
|
|
return Object.keys(taskResults.value).length > 0
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 移除模板中的压缩提示
|
|||
|
|
|
|||
|
|
**删除的内容**:
|
|||
|
|
```vue
|
|||
|
|
<!-- 数据已压缩提示 -->
|
|||
|
|
<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>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改空状态条件**:
|
|||
|
|
```vue
|
|||
|
|
<!-- 修改前 -->
|
|||
|
|
<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
|
|||
|
|
|