Skip to main content
ClaudeWave
Slash Command1k repo starsupdated 10d ago

optimize

系统优化扫描(full/ux/perf/code 四种模式)

Install in Claude Code
Copy
mkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/doccker/cc-use-exp/HEAD/.claude/commands/optimize.md -o ~/.claude/commands/optimize.md
Then start a new Claude Code session; the slash command loads automatically.

optimize.md

根据参数选择扫描模式:

- `/optimize` 或 `/optimize full` → 六维全量评估
- `/optimize ux` → 仅 UX 与操作费力度
- `/optimize perf` → 仅性能与中间件评估
- `/optimize code` → 仅代码质量、语法糖与冗余

参数值:「$ARGUMENTS」

---

## 第 0 步:范围选择

使用 AskUserQuestion 询问扫描范围:

```
请选择扫描范围:

1. 全量扫描(前端 + 后端)
   扫描所有代码,token 消耗较大(项目越大消耗越多),
   适合里程碑节点或季度优化。

2. 仅后端
   只扫描 Go/Java/Python 等后端代码。

3. 仅前端
   只扫描 Vue/React/TS 等前端代码。

4. 指定目录
   用户输入目录路径,只扫描指定模块。
```

用户选择「全量扫描」时,先统计规模并提示:

```bash
# 统计文件数和行数
git ls-files --exclude-standard | head -500
git ls-files --exclude-standard | xargs wc -l 2>/dev/null | tail -1
```

输出提示:
```
⚠️ 全量扫描预估:
  - 文件数:XX 个
  - 总行数:约 XXXX 行
  - 预计消耗 tokens 较多,确认继续?(Y/N)
```

用户确认后进入第 1 步。

---

## 第 1 步:项目画像

扫描项目基本信息,输出概览表:

### 扫描内容

1. **技术栈识别**:读取 `go.mod`(Go 版本)、`package.json`(Vue/React/Node 版本)、`pom.xml`(Java 版本)、`requirements.txt`/`pyproject.toml`(Python 版本)
2. **框架识别**:Gin/Echo/Fiber、Spring Boot、Vue/React、Element Plus/Ant Design
3. **数据库**:搜索 SQLite/MySQL/PostgreSQL 连接配置
4. **已用中间件**:搜索 Redis/MQ/MinIO/ES 的 import 和配置
5. **文件规模统计**:按语言分类统计文件数和行数
6. **大文件检测**:按语言阈值(Go 400行 / Vue 200行 / Java 300行 / TS/JS 300行 / Python 300行)

### 输出格式

```markdown
## 项目概览

| 项 | 值 |
|---|---|
| 技术栈 | Go 1.22 + Gin / Vue 3.4 + Element Plus 2.7 |
| 数据库 | SQLite / MySQL |
| 已用中间件 | Redis |
| 后端文件 | XX 个,约 XXXX 行 |
| 前端文件 | XX 个,约 XXXX 行 |
| 大文件(>阈值) | X 个 |
```

---

## 第 2 步:六维评估

根据模式参数决定执行哪些维度:

| 模式 | 执行维度 |
|------|---------|
| `full` | UX + PERF + CODE + SUGAR + SEC + BEST |
| `ux` | UX |
| `perf` | PERF + BEST(中间件相关) |
| `code` | CODE + SUGAR |

---

### 维度 1:[UX] 用户体验与操作费力度

#### 前端扫描

| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| 表单防重复提交 | 搜索 `<el-form>` / `<form>` 的提交处理 | 提交函数无 loading 状态控制 → 问题 |
| 列表空状态 | 搜索 `<el-table>` / `v-for` 列表 | 无 `<el-empty>` 或 empty slot → 问题 |
| 加载状态 | 搜索 API 调用处 | 无 loading / skeleton 反馈 → 问题 |
| 错误提示 | 搜索 `catch` 块 | `console.log` 吞错误,无用户提示 → 问题 |
| 表单校验 | 搜索 `<el-form>` | 无 `:rules` 或规则为空 → 问题 |
| 批量操作 | 搜索列表页 | 仅逐条操作,无批量选择能力 → 建议 |
| 响应式布局 | 搜索 `@media` / `:span` / `:xs` | 无任何响应式处理 → 建议 |

#### 后端扫描

| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| 接口响应格式 | 搜索 handler 返回结构 | 不统一(有的 `{code,data}` 有的裸返回)→ 问题 |
| 分页支持 | 搜索列表查询接口 | 返回全量数据无分页 → 问题 |
| 参数校验 | 搜索 handler 入参 | 无 `binding:"required"` 或手动校验 → 建议 |

---

### 维度 2:[PERF] 性能与中间件评估

#### 数据库性能

| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| N+1 查询 | 搜索循环内的 DB 调用 | `for` 循环内有 `db.Find` / `db.First` → Critical |
| 全表查询 | 搜索无 Where 的 Find/Select | `db.Find(&all)` 无条件无分页 → Critical |
| 缺失索引 | 读取 model struct tag | 外键和常用查询字段无 `index` tag → Important |
| 慢查询日志 | 搜索 GORM 配置 | 未配置 `SlowThreshold` → 建议 |
| 连接池 | 搜索 DB 配置 | 未设置 `MaxOpenConns` / `MaxIdleConns` → 建议 |

#### 前端性能

| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| 路由懒加载 | 搜索 router 配置 | 使用 `import Xxx from` 而非 `() => import()` → 问题 |
| 大依赖 | 读取 package.json | 检查 moment.js / lodash 全量引入 → 建议替代 |
| 图片优化 | 搜索静态资源 | 大图片(>500KB)未压缩 → 建议 |

#### 中间件评估矩阵

对以下中间件逐一评估,输出决策表:

**Redis 决策:**
- 扫描:搜索配置表/字典表的读取频率、session 管理方式、是否有热点查询
- 必要 → 高频读低频写的数据每次查库,且 QPS > 100
- 推荐 → 有配置/字典类数据每次查库,或 session 存数据库
- 不需要 → 数据变更频繁,或访问量很小

**MinIO(对象存储)决策:**
- 扫描:搜索 `os.WriteFile` / `ioutil.WriteFile` / `multipart` / `<el-upload>` / 本地 `uploads/` 目录
- 必要 → 文件上传 + 多实例/容器化部署
- 推荐 → 文件上传 + 单机但文件量大(>1GB) 或有 CDN 需求
- 不需要 → 无文件上传,或仅头像等小图且量极小

**Elasticsearch 决策:**
- 扫描:搜索 `LIKE '%keyword%'` / `.Where("name LIKE ?")` / 前端搜索框对应的后端实现
- 必要 → 模糊搜索 + 数据量 >10w + 多字段联合搜索
- 推荐 → 模糊搜索 + 数据量 >1w,或需要搜索建议/高亮/聚合
- 不需要 → 精确查询为主,或数据量 <1w 的简单 LIKE

**MQ(消息队列)决策:**
- 扫描:搜索耗时操作(发邮件 `smtp`/`gomail`、文件处理、外部 HTTP 调用)是否在请求链路中同步执行
- 必要 → 请求链路中有 >3s 的同步阻塞操作
- 推荐 → 有异步通知、日志收集、多服务解耦需求
- 不需要 → 无明显异步场景

**输出格式:**

```markdown
## 中间件评估

| 中间件 | 当前状态 | 建议 | 理由 |
|--------|---------|------|------|
| Redis | 未使用 | 推荐引入 | GetSysConfig() 每次查库,变更频率低 |
| MinIO | 未使用 | 推荐引入 | 文件存本地 ./uploads/,容器化有风险 |
| Elasticsearch | 未使用 | 暂不需要 | 搜索场景简单,数据量 <1w |
| MQ | 未使用 | 暂不需要 | 无明显异步阻塞场景 |
```

---

### 维度 3:[CODE] 代码质量与组件抽取

| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| **前端重复组件** | 搜索相似的模板结构(相同 el- 组件组合出现 ≥2 次) | 多页面有相同布局 → 应抽取公共组件 |
| **前端重复逻辑** | 搜索相同的 API 调用 + 分页 + 搜索模式 | ≥2 处相同 CRUD 模式 → 应抽取 composable |
| **后端重复代码** | 搜索 service 层相同的 查询+校验+更新 模式 | ≥3 个 service 相同模式 → 建议泛型封装 |
| **前后端重复定义** | 对比后端 struct/DTO 和前端 interface/type | 同一实体两端各定义,字段不一致 → 问题 |
| **上帝文件** | 按语言阈值检测超大文件 | 超过阈值 → 给出拆分建议 |
| **死代码** | 搜索未被 import 的 exported 函数、未使用的组件文件 | 存在 → 建议删除 |
| **硬编码** | 搜索魔法数字、硬编码 URL、写死的配置值 | 存在 → 建议提取常量或配置 |

**组件抽取建议输出格式:**

```markdown
## 组件抽取建议

| 当前位置 | 建议抽取为 | 复用次数 | 预计减少行数 |
|---------|-----------|---------|------------|
| views/user/Detail, views/order/Detail | components/DetailCard.vue | 3 | ~100 行 |
| api/user.ts, api/order.ts 的错误处理 | utils/request.ts | 8 | ~60 行 |
| service/user.go, service/order.go CRUD | pkg/base/service.go (泛型) | 4 | ~200 行 |
```

---

### 维度 4:[SUGAR] 语法糖与现代化写法

读取项目的语言版本后,按以下检查表扫描:

#### Go(读 go.mod 的 `go 1.xx`)

| 版本要求 | 检查项 | 旧写法特征 | 新写法 |
|---------|--------|-----------|--------|
| 1.21+ | slices 包 | 手写 Contains/Filter/Map 工具函数 | `slices.Contains()` 等标准库 |
| 1.21+ | slog 结构化日志 | `log.Println` / `fmt.Println` | `slog.Info()` |
| 1.21+ | min/max 内置函数 | 手写 `if a > b { return a }` | `max(a, b)` |
| 1.22+ | range 整数 | `for i := 0; i < n; i++` | `for i := range n` |
| 1.22+ | http 路由增强 | 简单 mux + 手动路径匹配 | `http.HandleFunc("GET /api/{id}")` |
| 1.23+ | iter 迭代器 | 手写迭代逻辑 | `iter.Seq` / `iter.Seq2` |

#### Java(读 pom.xml 的 `<java.version>`)

| 版本要求 | 检查项 | 旧写法特征 | 新写法 |
|---------|--------|-----------|--------|
| 17+ | record | 纯数据 class(只有 getter/setter) | `record UserDTO(String name, int age)` |
| 17+ | sealed class | 大量 instanceof 判断 | sealed + pattern matching |
| 17+ | switch 表达式 | 多层 if-else 或 switch-case + break | `switch` 表达式 + `->` |
| 17+ | text block | 多行字符串拼接 | `"""` 文本块 |
| 21+ | virtual threads | `new Thread()` / 自建线程池处理简单任务 | `Thread.ofVirtual()` |

#### Vue / TypeScript(读 package.json 版本)

| 版本要求 | 检查项 | 旧写法特征 | 新写法 |
|---------|--------|-----------|--------|
| Vue 3.3+ | defineOptions |
api-design-safetySkill

当设计或修改 REST API 响应结构、处理 API 返回值,或生成 Excel/CSV/PDF/对账文件等下游产物时触发。防止 API 设计缺陷导致的字段错位、类型歧义,以及生成产物时关键字段缺失但静默成功的问题。

api-proxy-safetySkill

网关/代理/WAF/CDN 中间件的安全关键词匹配实现规范,防止纯子串匹配误判正常响应内容中的技术术语(如 Cloudflare、502、error)

async-task-patternSkill

当 API/任务可能执行超过 10 秒(批量数据处理、远程 API 批量调用、全表扫描、跨租户聚合)时触发。防止同步接口被网关 30s 超时切断、用户重复点击触发并发、状态缓存内存泄漏等问题。提供异步任务状态机标准模板。

bash-styleSkill

当用户操作 .sh、Dockerfile、Makefile、.yml、.yaml 文件,或在 Markdown 中编写 bash 代码块时触发。提供 Bash 编写规范。

code-quality-principlesSkill

当编写新模块、设计接口、重构代码或代码审查时触发。提供经典模块化六原则检查清单(大小适中/调用深度/扇入扇出/边界清晰/作用域内聚/可预测性),适用于 PR/Review/新模块设计场景。

external-system-debuggingSkill

涉及浏览器、编辑器、CDN/WAF、IM 平台、操作系统剪贴板、第三方 SaaS 等"外部黑盒系统"的代码编写或 bug 调试时触发。强制先抓真实环境数据再推理,避免连续 2 轮"凭代码推理"的修复 no-op。关键词:粘贴/复制异常、跨平台显示不一致、第三方 API 怪结果、CDN/WAF 拦截、本地复现失败、HTML→MD 转换丢属性。

field-mapping-safetySkill

当重构涉及字段映射(dataIndex、枚举映射、类型转换)时触发。防止字段名推测错误,确保字段映射的正确性。

frontend-devSkill

前端开发规范,包含 Vue 3 编码规范、UI 风格约束、TypeScript 规范等