代码优化记录
2026-01-03 场景拍摄列表页代码瘦身
优化概览
| 指标 | 优化前 | 优化后 | 减少 |
|---|---|---|---|
| 文件行数 | 4687 行 | 3797 行 | 890 行 (19%) |
| 函数数量 | 89 个 | 68 个 | 21 个 |
| 样式类 | ~180 个 | ~140 个 | 40+ 个 |
优化原则
- 删除未使用代码: 彻底清理模板中未引用的函数和变量
- 消除重复: 合并功能相同的方法
- 精简样式: 删除无对应 HTML 元素的样式类
- 保持功能: 确保所有核心功能正常运行
- 无报错: 通过 linter 检查,零错误
删除的内容清单
1. 未使用的函数(21个)
| 函数名 | 说明 | 原因 |
|---|---|---|
getModeIcon | 获取生成模式图标 | 模板中未使用 |
getModeName | 获取生成模式名称 | 模板中未使用 |
getQualityLabel | 获取质量标签 | 模板中未使用 |
quickStart | 快速开始拍摄 | 模板中未使用 |
scrollToScene | 滚动到指定场景 | 模板中未使用 |
previewSceneVideo | 预览场景视频 | 已被 openSceneReview 替代 |
captureScenePhoto | 拍摄场景照片 | 模板中未使用 |
handleGenerate | 处理生成按钮点击 | 模板中未使用 |
showAllMissing | 显示所有待拍摄场景 | 模板中未使用 |
getSceneAssets | 获取场景素材 | 模板中未使用 |
previewVideo | 预览视频 | 模板中未使用 |
previewPhoto | 预览照片 | 模板中未使用 |
formatDuration | 格式化时长 | 模板中未使用 |
recordScene | 拍摄场景 | recordSceneWithTeleprompter 的重复别名 |
chooseFromCamera | 使用系统相机拍摄 | 模板中未使用 |
showSceneGuide | 显示场景拍摄指引 | 模板中未使用 |
startRecording | 开始拍摄引导 | startContinuousRecord 的重复别名 |
uploadAsset | 上传素材 | 模板中未使用 |
handlePublish | 发布到平台 | 模板中未使用 |
switchTab | 切换标签页 | 页面无标签页UI |
handleResetGenerationStatus | 重置生成状态 | 调试用函数,未在模板中使用 |
2. 未使用的计算属性(2个)
| 属性名 | 说明 | 原因 |
|---|---|---|
hasVideoResult | 是否有视频结果 | 模板中未使用 |
currentGenerationStatus | 当前生成状态 | 模板中未使用 |
3. 未使用的响应式变量(1个)
| 变量名 | 说明 | 原因 |
|---|---|---|
currentTab | 当前标签页 | 页面无标签页切换功能 |
4. 未使用的样式类(40+ 个)
标签页相关:
.tabs-section/.tabs-container/.tab-item/.tab-icon/.tab-text/.tab-indicator
素材展示相关:
.materials-tab-content/.scene-materials-list/.scene-material-item.asset-group/.asset-grid/.asset-thumb/.play-badge/.duration-badge
口播编辑旧版样式:
.karaoke-header/.edit-toggle/.tap-hint/.narration-editor.editor-actions/.ai-btn/.char-count.guide-label-row/.edit-trigger/.narration-edit-container.edit-actions/.action-btn-mini
其他未使用样式:
.tips-section/.tips-list/.tip-item.tip-box/.tip-icon/.tip-text.scenes-guide.fixed-bottom-bar/.bottom-bar-content.assets-overview-card/.overview-header/.overview-title/.quick-action-btn.scene-dots-progress/.scene-dot/.dot-inner/.dot-check/.dot-num.progress-summary/.progress-label-row/.progress-main-label
保留的核心代码
核心功能函数
| 函数 | 用途 |
|---|---|
openSceneReview | 打开场景回顾弹窗 |
handleSceneReviewClose | 关闭场景回顾弹窗 |
handleSceneRetake | 处理场景重拍 |
handleScriptUpdate | 处理口播文案更新 |
toggleExpand | 展开/收起场景详情 |
isSceneComplete | 检查场景是否完成 |
getSceneVideoStatus | 获取场景视频状态 |
getScenePhotoStatus | 获取场景照片状态 |
recordSceneWithTeleprompter | 录制场景(带提词器) |
chooseFromAlbum | 从相册选择素材 |
selectGenerationMode | 选择生成模式 |
startGeneration | 开始生成 |
uploadPhoto | 上传照片 |
uploadVideo | 上传视频 |
checkAssetsExist | 检查素材文件是否存在 |
核心计算属性
| 属性 | 用途 |
|---|---|
pipelineInfo | 流水线信息 |
overallProgress | 整体进度 |
recommendedMode | 推荐生成模式 |
missingAssets | 缺失素材列表 |
canGenerateModes | 各模式是否可用 |
resultThumbnailUrl | 结果缩略图URL |
resultVideoDuration | 结果视频时长 |
关键样式保留
- ✅ 导航栏样式
- ✅ 流水线信息卡片
- ✅ 场景横向滚动列表
- ✅ 场景详情展开区域
- ✅ 回顾本场景入口(新增)
- ✅ 素材状态显示
- ✅ 生成模式选择
- ✅ 操作按钮
优化效果
性能提升
文件体积减少 19%
- 减少网络传输时间
- 加快小程序编译速度
代码可维护性提升
- 删除冗余代码,减少理解成本
- 函数职责更清晰
- 减少潜在 bug 风险
运行时性能优化
- 减少不必要的响应式数据
- 降低组件渲染开销
质量保障
- ✅ 零报错: 所有代码通过 linter 检查
- ✅ 功能完整: 核心功能无损失
- ✅ 向后兼容: 现有功能正常运行
优化前后对比
文件结构对比
优化前:
- 4687 行代码
- 89 个函数
- ~180 个样式类
- 多个重复功能
- 大量未使用代码
优化后:
- 3797 行代码 ↓ 19%
- 68 个函数 ↓ 21 个
- ~140 个样式类 ↓ 40+ 个
- 功能更集中
- 代码更精简代码示例对比
优化前(重复方法):
javascript
// 方法1
const recordScene = (index) => {
recordSceneWithTeleprompter(index);
};
// 方法2(功能完全相同)
const startRecording = () => {
startContinuousRecord();
};优化后(直接使用主方法):
javascript
// 模板中直接调用
@click="recordSceneWithTeleprompter(index)"
// 或
@click="startContinuousRecord()"优化前(未使用的样式):
scss
.tabs-section {
position: sticky;
top: 88rpx;
// ... 50+ 行样式代码
}
.tab-item {
// ... 30+ 行样式代码
}
// 但模板中无对应 HTML 元素优化后(已删除):
(样式已完全移除,无对应功能)优化流程
第一步:代码审查
bash
# 1. 搜索所有函数定义
grep -n "^const \w+ = " task-detail/index.vue
# 2. 在模板中搜索引用
grep -n "@click=\"functionName" task-detail/index.vue
# 3. 对比找出未使用函数第二步:删除无效代码
javascript
// 删除未使用函数
- const getModeIcon = (mode) => {...} // 删除
// 删除未使用计算属性
- const hasVideoResult = computed(() => {...}) // 删除
// 删除未使用变量
- const currentTab = ref('results') // 删除第三步:清理样式
scss
// 删除无对应 HTML 的样式类
- .tabs-section {...} // 删除
- .materials-tab-content {...} // 删除第四步:测试验证
bash
# 1. Linter 检查
npm run lint
# 2. 编译测试
npm run dev:mp-weixin
# 3. 功能测试
- 测试所有核心功能
- 检查页面样式
- 验证交互流程后续优化建议
短期优化(1-2周)
进一步模块化
- 将大型函数拆分为小函数
- 提取可复用的工具函数到
utils/
性能监控
- 添加关键节点的性能埋点
- 监控页面加载和渲染时间
代码规范
- 统一命名风格
- 添加 JSDoc 注释
中期优化(1-2月)
组件拆分
- 将场景卡片抽取为独立组件
- 将生成模式选择抽取为独立组件
状态管理
- 使用 Pinia 统一管理状态
- 减少 props drilling
TypeScript 迁移
- 添加类型定义
- 提升代码健壮性
长期优化(3-6月)
架构重构
- 采用分层架构(UI / 业务 / 数据)
- 引入领域模型
自动化测试
- 添加单元测试
- 添加集成测试
持续优化
- 定期代码审查
- 建立代码质量看板
维护规范
添加新功能时
- 先搜索现有代码: 避免重复实现
- 及时清理旧代码: 功能替换时删除旧代码
- 保持样式同步: 删除 HTML 时同步删除对应样式
- 更新文档: 记录重要变更
定期审查清单
- [ ] 每月检查未使用的导入
- [ ] 每季度清理未使用的函数
- [ ] 每季度清理未使用的样式
- [ ] 每半年进行代码重构评估
相关文档
💡 优化总结
通过本次代码瘦身,我们成功减少了 19% 的代码量,同时保持了所有核心功能的完整性。这不仅提升了代码的可维护性,也为后续的功能迭代打下了良好的基础。