# 前端代码简化与优化提示词

## 目标
深入分析并简化前端代码结构，提升执行效率、可维护性和类型安全性。

## 优化原则

### 1. 代码简化
- **消除冗余**：识别并移除重复的逻辑、条件判断和错误处理模式
- **函数拆分**：将大型函数拆分为职责单一的小函数（每个函数只做一件事）
- **提取常量**：将魔法数字、字符串字面量提取为命名常量
- **减少嵌套**：使用早期返回（early return）替代深层 if/else 嵌套

### 2. 类型安全
- **明确类型**：为所有函数参数和返回值添加 TypeScript 类型注解
- **接口定义**：为复杂对象结构定义 interface，避免 `any` 类型
- **联合类型**：使用 discriminated unions 替代运行时 typeof 检查

### 3. 性能优化
- **懒加载**：对非核心模块使用动态 import() 
- **防抖节流**：对频繁触发的事件（输入、滚动）添加 debounce/throttle
- **计算缓存**：对纯函数的重复计算结果进行 memoization
- **条件渲染**：使用 v-if/v-show 控制不必要的 DOM 操作

### 4. 错误处理
- **统一错误边界**：集中处理 fetch/API 调用异常
- **有意义错误信息**：避免空 catch，提供具体的失败原因
- **降级策略**：关键功能失败时有优雅的 fallback

### 5. 状态管理
- **最小化状态**：只存储必要的响应式数据
- **派生状态**：使用 computed 替代手动监听 + 条件赋值
- **作用域限制**：将状态定义在尽可能小的组件范围内

## 检查清单

### api.js 优化点
```typescript
// ❌ 问题：过多的条件分支和嵌套
function getCancelUrl(apiUrl) {
  const normalized = String(apiUrl || '').replace(/\/+$/, '')
  if (/\/v1\/pro\/completions$/i.test(normalized)) { /*...*/ }
  if (/\/v1\/web-search$/i.test(normalized)) { /*...*/ }
  // ...
}

// ✅ 优化：使用映射表替代条件链
const CANCEL_PATH_MAP = {
  '/v1/pro/completions': '/v1/pro/completions/cancel',
  '/v1/web-search': '/v1/web-search/cancel',
  '/v1/completions': '/v1/completions/cancel',
}
function getCancelUrl(apiUrl) {
  const base = new URL(apiUrl).pathname.replace(/\/+$/, '')
  return CANCEL_PATH_MAP[base] || `${base}/cancel`
}
```

### 通用模式识别
1. **重复的 fetch 包装**：提取统一的 `safeFetch()` 函数处理认证头、错误和超时
2. **SSE 解析器重复**：将 `parseSseEvent` 抽象为可复用的 stream 处理器
3. **设置状态访问**：避免在每次 API 调用时重新创建 settings store 实例
4. **条件类型检查**：用 TypeScript discriminated union 替代运行时 `typeof x === 'string'`

## 执行步骤

### 第一步：分析
1. 使用 `grep_search` 查找重复模式（相同的 if/else 块、try/catch）
2. 使用 `semantic_search` 查找相似功能的不同实现
3. 识别高频调用的函数（API 请求、事件处理器）

### 第二步：重构
1. **提取纯函数**：将副作用（fetch、DOM操作）与数据处理分离
2. **创建工具库**：将通用逻辑移至 `src/utils/` 下的独立模块
3. **添加类型定义**：在 `src/plugins/types.ts` 中集中管理接口
4. **简化条件逻辑**：用策略模式或映射表替代 switch/if 链

### 第三步：验证
1. 运行 `npm run build` 确认无类型错误
2. 检查 `get_errors` 确保没有引入新问题
3. 手动测试关键路径（补全、OCR、上传）

## 输出格式

每次优化后提供：
```markdown
### 优化项: [函数名/文件名]

**问题**: [简要描述当前代码的问题]

**改动**:
```diff
- // 旧代码
+ // 新代码
```

**收益**: 
- 行数减少: X%
- 时间复杂度: O(n) → O(1)
- 可读性提升: [具体说明]
```

## 示例调用

```bash
# 简化 api.js 中的 URL 处理逻辑
"简化 src/utils/api.js 中 getCancelUrl() 函数的条件分支，使用映射表替代正则匹配"

# 优化 copilotPlugin.ts 的类型定义  
"为 src/plugins/copilotPlugin.ts 添加完整的 TypeScript 类型注解，消除所有 any 类型"

# 提取重复的错误处理
"将 src/utils/api.js 中分散的 try/catch 错误处理提取为统一的 errorBoundary() 高阶函数"
```

## 注意事项

- ✅ 保持向后兼容：不破坏现有 API 接口和事件流
- ✅ 小步快跑：每次只优化一个函数或模块，验证后再继续
- ❌ 避免过度优化：不要为了炫技引入复杂的函数式编程模式
- ⚠️ 测试覆盖：修改核心路径（补全、取消请求）前确保有对应测试
- 📝 文档同步：更新 CLAUDE.md 和 AGENTS.md 中的架构描述

## 参考文件

- `src/utils/api.js` - API 请求层，存在多处可简化的条件逻辑
- `src/plugins/copilotPlugin.ts` - 补全插件，类型定义不完整
- `src/stores/settings.js` - 状态管理，可优化响应式依赖
- `backend/prompt.py` - Prompt 组装逻辑（后端参考）
