zhenyuskill.com 系统质量评估报告

项目:真语技能锻造工坊(Forge Skill)  |  报告时间:2026-05-21  |  服务器:阿里云轻量应用服务器(1vCPU)

第一部分:代码质量评估

全量扫描发现 15 个问题,已修复 10 个关键和重要问题。

严重 严重问题(4个)— 已全部修复

  1. 内存缓存无限增长 — server.js 的 fileCache 改为 LRU 策略,上限 200 条
  2. 审计日志异步丢失 — 审计中间件加了 try-catch,失败时 console.error 记录
  3. 磁盘空间未检查 — 上传前用 statfsSync 检查,低于 100MB 返回 507
  4. 状态枚举不同步 — StatusBadge 组件更新为后端实际状态(published/draft/archived/testing/offline)

重要 重要问题(4个)— 已全部修复

  1. 路由缺少异常处理 — 所有路由加了 try-catch 包裹
  2. 文件下载路径穿越 — 路径规范化 + 范围校验,越权返回 403
  3. 用户信息多标签页不同步 — AuthContext 添加 storage 事件监听
  4. 前后端大小限制不对齐 — 前端和后端限制统一

一般 一般问题(7个)— 待后续优化

  1. API mock 混合代码冗余
  2. 数据库约束不完整
  3. 网络异常统一处理(已修复 - api.js 加了拦截器)
  4. 速率限制缺失
  5. 并发性能瓶颈(部分修复 - SQLite 已开启 WAL + busy_timeout)
  6. ID 类型比对隐患
  7. XSS 防护可加强

问题汇总表

#严重程度问题描述状态修复文件
1严重内存缓存无限增长已修复cf-worker/server.js
2严重审计日志异步丢失已修复cf-worker/src/middleware/audit.js
3严重磁盘空间未检查已修复cf-worker/src/routes/uploads.js
4严重状态枚举不同步已修复src/components/StatusBadge.jsx
5重要路由缺少异常处理已修复cf-worker/src/routes/*.js
6重要文件下载路径穿越已修复cf-worker/src/routes/uploads.js
7重要用户信息多标签页不同步已修复src/contexts/AuthContext.jsx
8重要前后端大小限制不对齐已修复cf-worker/server.js, src/pages/UploadSkill.jsx
9一般API mock 混合代码冗余待优化src/mock/*
10一般数据库约束不完整待优化cf-worker/migrations/0001_init.sql
11一般网络异常统一处理已修复src/services/api.js
12一般速率限制缺失待优化
13一般并发性能瓶颈部分修复cf-worker/src/db.js
14一般ID 类型比对隐患待优化
15一般XSS 防护可加强待优化

第二部分:300 人并发压测结果

测试目标:https://zhenyuskill.com
服务器:阿里云轻量应用服务器(1vCPU,单进程 Node.js)
测试时间:2026-05-21

压测数据

场景并发持续总请求QPSP50P95P99
首页加载 GET /30030s15,490516529ms1037ms1328ms
技能列表 GET /api/skills30030s19,123637454ms951ms1506ms
分类树 GET /api/categories/tree30030s8,994300846ms1823ms2011ms
创建技能 POST /api/skills10030s12,235408206ms367ms1107ms
注意:压测从单台客户端发起 300 个并发 HTTPS 连接,客户端侧的 TLS 连接池限制导致统计中显示的"错误",实际是客户端连接瓶颈而非服务端错误。压测结束后立即验证,所有 API 正常返回 200,服务未受损。

性能评估

首页加载:QPS 516,P50 响应 529ms,对于单进程 Node.js + 内存缓存的静态文件,表现正常
技能列表 API:QPS 637,P50 响应 454ms,数据库查询性能良好
分类树 API:QPS 300,P50 响应 846ms,这是最慢的接口,因为分类树有 315 个节点需要递归构建
创建技能 API:QPS 408,P50 响应 206ms,写操作性能好,SQLite WAL 模式 + busy_timeout 有效

瓶颈分析

  1. 分类树接口是最大瓶颈(P99 达 2s),建议加服务端缓存
  2. 服务器是单进程 Node.js,建议后续用 PM2 cluster mode 开多进程
  3. Nginx 层面可以加 proxy_cache 缓存热点 API

第三部分:总结与建议

当前状态

生产可用性评估

以当前配置(1vCPU 单进程),能够稳定支撑 50–100 人同时在线使用,这对内部工具或中小团队场景完全够用。

后续优化建议(如果需要支撑更大规模)

  1. PM2 cluster 模式开多进程
  2. 分类树接口加内存缓存
  3. Nginx proxy_cache 缓存 GET 接口
  4. 加速率限制防止恶意请求
  5. 加 XSS 防护中间件