module5
60 分钟

项目复盘与优化

学习进度

当前模块0/6 课
总进度0/36 课
学习时长0 分钟

学习目标

  • 用 Codex 执行全面的代码质量分析
  • 识别并修复性能瓶颈
  • 执行自动化安全扫描
  • 生成项目复盘总结文档
  • 数据库查询是否有合适索引
  • API 响应是否启用了 gzip 压缩
  • 静态资源是否 CDN 分发
  • 前端是否有代码分割(Route-level + Component-level)
  • 图片是否使用 WebP + 懒加载
  • 是否启用了 HTTP/2
  • 是否使用了 Service Worker 缓存

406 项目复盘与优化

用 Codex 进行代码质量审查、性能瓶颈分析和安全扫描

学习目标

完成本课程后,你将能够:

一、代码质量分析

用 Codex 全面审查代码

/review 请对整个项目进行全面代码审查,关注:
1. 代码规范和一致性
2. 潜在的 Bug 和边界条件
3. 重复代码和抽象机会
4. TypeScript 类型安全
5. 错误处理完整性
6. 异步操作的竞态条件

代码质量指标

维度检查项Codex 命令
类型安全any 使用率、strictNullChecks`/review`
错误处理try/catch 覆盖率`/review`
可读性函数长度、嵌套深度`/review`
重复代码相似度 > 80% 的代码块`/refactor`
依赖更新过时的包、已知漏洞`/deps`
测试覆盖分支覆盖率 < 70%`/test`

代码坏味道识别

常见代码坏味道:
1. 超大函数(> 50 行)      → 拆分为多个小函数
2. 深层嵌套(> 4 层)       → 提前 return / Guard Clause
3. 魔法数字/字符串          → 提取为命名常量
4. 重复的条件判断           → 策略模式 / 查表法
5. 硬编码的环境依赖         → 依赖注入
6. 过多的函数参数(> 4 个) → 参数对象化

Codex 重构示例

/refactor 请重构以下代码,减少嵌套层级,提取常量:

function calculatePrice(user, items) {
  let total = 0;
  if (user) {
    if (user.type === 'VIP') {
      if (items.length > 0) {
        for (const item of items) {
          if (item.price > 0) {
            if (item.category === 'electronics') {
              total += item.price * 0.85;
            } else {
              total += item.price * 0.9;
            }
          }
        }
      }
    } else {
      // ... 更多嵌套
    }
  }
  return total;
}

二、性能瓶颈分析

性能分析流程

1. 负载测试      → 用 k6 / Artillery 模拟生产流量
2. 火焰图分析    → 找出 CPU 热点函数
3. 慢查询分析    → 数据库最耗时的 Top 10 查询
4. 内存分析      → 找出内存泄漏点
5. 网络分析      → 大体积请求/响应、重复请求

用 Codex 分析性能数据

/debug 这是 Apache Bench 的压力测试结果,帮我分析瓶颈:

Concurrency Level:      100
Time taken for tests:   45.3 seconds
Complete requests:      10000
Failed requests:        234
Requests per second:    220.75 [#/sec]
Time per request:       453.0 [ms] (mean)
Transfer rate:          1120.50 [Kbytes/sec]

Percentage of requests:
  50%    320ms
  90%    890ms
  95%   1200ms
  99%   2500ms
 100%   5200ms (longest request)

错误集中在 /api/tasks/board 接口
数据库连接池耗尽 12 次

常见性能问题与修复

// 问题 1:循环中的异步操作
// ❌ 串行处理 100 个任务(耗时 = 100 × 100ms = 10s)
for (const task of tasks) {
  await notifyAssignee(task);
}

// ✅ 并发处理(耗时 ≈ 100ms)
await Promise.all(tasks.map(task => notifyAssignee(task)));

// ✅ 控制并发数(兼顾性能和资源)
import pLimit from 'p-limit';
const limit = pLimit(10);
await Promise.all(tasks.map(task =>
  limit(() => notifyAssignee(task))
));

// 问题 2:未使用连接池
// ❌ 每次请求创建新连接
const client = new Client(connectionString);

// ✅ 使用 Prisma 内置连接池
// connection_limit=20 在 DATABASE_URL 中配置

// 问题 3:前端包体积过大
// ❌ 全量导入
import { format, parse, differenceInDays } from 'date-fns';

// ✅ 按路径导入(Tree Shaking 友好)
import format from 'date-fns/format';

性能优化检查清单

三、安全扫描

用 Codex 执行安全检查

/review 请对整个项目进行安全审计,检查:
1. SQL 注入风险(使用 Prisma 通常安全,但原始查询需审查)
2. XSS 跨站脚本(检查 dangerouslySetInnerHTML)
3. CSRF 防护
4. 敏感信息泄露(API Key、密码明文)
5. 认证和授权漏洞
6. 依赖包的已知 CVE

依赖安全检查

# 用 npm audit 扫描已知漏洞
npm audit --production

# 用 Codex 分析结果
/deps 我运行了 npm audit,发现 5 个高危漏洞,帮我分析修复方案:
- 2 个可自动修复(npm audit fix)
- 3 个需要手动升级大版本

安全加固措施

// 1. 密码哈希(bcrypt)
import bcrypt from 'bcrypt';
const SALT_ROUNDS = 12;

// 2. 速率限制
import rateLimit from 'express-rate-limit';

const authLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 分钟
  max: 10,                    // 最多 10 次
  message: '登录尝试次数过多,请稍后重试',
});
app.use('/api/auth/login', authLimiter);

// 3. HTTP 安全头
import helmet from 'helmet';
app.use(helmet());

// 4. CORS 白名单
import cors from 'cors';
app.use(cors({
  origin: process.env.ALLOWED_ORIGINS?.split(',') || [],
  credentials: true,
}));

// 5. 请求大小限制
app.use(express.json({ limit: '1mb' }));

安全检查清单

检查项状态备注
JWT Secret 复杂度[ ]至少 256 位随机值
密码最小长度 8 位[ ]含大小写 + 数字 + 特殊字符
HTTPS 强制启用[ ]HSTS 头
API Key 不在代码中[ ]使用环境变量
文件上传类型校验[ ]MIME 白名单
日志中无敏感数据[ ]脱敏处理

四、项目复盘文档

用 Codex 生成项目总结

/docs 请为这个全栈项目生成复盘总结文档,包括:

1. 项目概况
   - 技术栈:Next.js + Express + Prisma + PostgreSQL
   - 开发周期:4 周
   - AI 辅助占比估算

2. 架构回顾
   - 做对了什么
   - 有哪些可以改进

3. AI 工具使用统计
   - 哪些功能 AI 生成比例最高
   - 哪些需要大量人工调整

4. 经验教训
   - 技术选型反思
   - 开发流程改进建议

5. 后续规划
   - 技术债务清单
   - 功能迭代路线图

复盘模板

项目复盘 — TaskFlow 任务管理平台

一、项目数据
- 代码行数:前端 8500 行 / 后端 6200 行
- AI 生成比例:前端 65% / 后端 75% / 测试 85%
- 开发效率提升:约 3.5 倍

二、AI 工具使用最佳实践
- 生成代码前先明确接口契约(输入/输出类型)
- 复杂逻辑分步骤引导,不期望一次生成全部
- 每完成一个模块立即让 AI 审查
- 测试用例几乎全部由 AI 生成

三、踩过的坑
- AI 生成的权限中间件未考虑边界条件,需要人工补充
- 首次生成的 Docker Compose 版本不兼容 Apple Silicon
- N+1 查询在原型阶段没问题,数据量增大后暴露

四、给团队的建议
- 建立共享的 Codex 指令模板库
- 定期更新 codex.yaml 项目规则
- Code Review 重点关注 AI 生成代码的错误处理

五、持续优化机制

优化循环

测量(Measure)
  → 分析(Analyze)
    → 优化(Optimize)
      → 验证(Verify)
        → 回到测量

用 Codex 建立优化 SOP

优化标准操作流程:

1. 每周运行 /review 检查代码质量
2. 每两周运行 /deps 升级依赖
3. 每月运行性能基准测试
4. 每次部署后对比性能指标
5. 季度安全审计

六、本课总结

**核心要点:**

  • `/review` 命令是代码质量的核心工具,覆盖类型安全、错误处理、代码坏味道
  • 性能优化从指标出发:先测量,再定位热点,最后精准优化
  • 安全检查要融入到 CI/CD 流水线中,每次提交都自动扫描
  • 项目复盘文档沉淀团队知识,是组织能力资产
  • 持续优化不是一次性行为,而是纳入日常开发的标准流程

**下一步:** 进入模块六 — 团队与企业落地,学习如何将 Codex 推广到整个团队

下一模块