sqxp-wx-接口性能排查报告-2026-04-25.md 5.9 KB

sqxp-wx 微信小程序接口性能排查报告(2026-04-25)

1. 排查目标

  • 对 sqxp-wx 小程序界面实际调用的后端接口做一次整体性能摸排。
  • 识别高延迟接口与潜在风险点,输出可直接执行的后续优化建议。

2. 排查范围与口径

  • 代码来源:sqxp-wx 业务代码(pages/、stores/、utils/,排除 uni_modules/、wxcomponents/)。
  • 自动提取到接口定义:30 个(含 GET/POST/PUT/DELETE)。
  • 本轮压测对象:GET 接口 20 个(避免写接口污染数据)。
  • 认证方式:使用 client02 登录态 Token(小程序登录流程,RSA 加密)。
  • 采样方式:串行采样,每接口 N=8。
  • 成功判定:HTTP 200 且业务 code=200(或无业务码)。

原始采样明细见:docs/sqxp-wx-接口性能排查-raw-2026-04-25.json

3. 总体结果

  • GET 接口总数:20
  • 可成功压测:17
  • 未成功压测:3(均为供应商侧接口,当前账号权限/数据前置不满足)
  • p95 >= 800ms 的接口:0

结论:本轮未发现“高风险慢接口”(按 p95 >= 800ms 标准),但有 2 个接口接近阈值,建议列为重点观察对象。

4. 重点观察接口(按 p95 降序)

接口 平均耗时 P95 P99 Max 结论
GET /mini/client/products 759.10ms 798.84ms 798.84ms 868.60ms 接近风险阈值,建议优先专项优化
GET /mini/client/price-list/current 724.00ms 785.51ms 785.51ms 841.48ms 接近风险阈值,建议优先专项优化
GET /mini/client/product-categories/sidebar 427.62ms 456.67ms 456.67ms 462.92ms 中等延迟,可持续观察
GET /mini/client/product-categories/first-level 438.38ms 456.66ms 456.66ms 477.97ms 中等延迟,可持续观察
GET /mini/deliverer/tasks/statistics 348.69ms 385.91ms 385.91ms 386.81ms 可接受

5. 压测失败/待补测接口

以下接口在当前 client02 登录态下无法获得成功样本,属于“权限/数据前置不匹配”,不代表性能异常:

接口 结果 返回码分布 说明
GET /mini/supplier/inquiries 失败 HTTP 200, biz_code=400 提示“用户未绑定区域”
GET /mini/supplier/quotations 失败 HTTP 200, biz_code=404 提示“用户不存在”
GET /mini/supplier/tasks 失败 HTTP 200, biz_code=404 提示“用户不存在”

建议后续补齐供应商账号(可登录 + 已绑定区域)后复测这 3 个接口。

6. 分模块观察

  • 客户端核心链路
    • /mini/client/products 与 /mini/client/price-list/current 是当前小程序端最慢的两个读接口。
    • 购物车、地址、订单相关接口整体在 p95 < 300ms,表现稳定。
  • 公共能力接口
    • /mini/common/china-region-tree 当前 p95 已降到 214.57ms,优化效果明显。
  • 配送员/供应商
    • 可测的 /mini/deliverer/tasks/statistics 与 /mini/supplier/dashboard/statistics 在 p95 < 400ms,无明显风险。

7. 优化建议(按优先级)

  1. P0:/mini/client/products 专项
    • 排查是否存在列表 N+1(分类名、单位名、价格补充字段逐条查询)。
    • 补齐 is_del + category_id + create_at / is_del + region_id + create_at 等组合索引(按实际 SQL 过滤条件确认)。
  2. P0:/mini/client/price-list/current 专项
    • 复核是否存在“当前价格单 + 明细 + 关联信息”多次查询与重复计算。
    • 对低频变更数据考虑短 TTL 缓存(进程内或 Redis)。
  3. P1:供应商接口补测
    • 准备可用供应商测试账号并完成区域绑定,补齐 /mini/supplier/* 的性能样本。
  4. P1:建立小程序性能基线巡检
    • 建议沿用本次脚本方式,按日/按周输出 p95 趋势。

8. 本轮结论

  • sqxp-wx 小程序界面涉及的 GET 接口整体性能处于可接受区间,未出现 p95 >= 800ms 的明确风险接口。
  • 但客户端两条核心接口(/mini/client/products、/mini/client/price-list/current)已接近风险阈值,建议下一轮优先专项优化,避免业务增长后进入高风险区。

9. 客户端核心接口专项优化闭环(已完成)

9.1 优化对象

  • GET /mini/client/products
  • GET /mini/client/price-list/current

9.2 慢点定位

  • 两个接口都存在明显循环内查库(N+1):
    • 价格项循环中逐条查商品/分类/单位;
    • 分类根节点解析存在多次递归查库;
    • 大量重复 ORM 查询导致高尾延迟。

9.3 优化动作

  • backend/app/api/mini_client.py(/price-list/current)
    • 改为一次性批量查询价格项 + 商品 + 分类 + 单位(join);
    • 移除循环内 product/category/unit 逐条查询。
  • backend/app/api/mini_client_extra.py(/products)
    • 改为批量查询价格项 + 商品 + 单位;
    • 分类信息改为一次批量加载并在内存构建父链缓存;
    • 消除循环内 product/category/unit 查询与根分类递归查库。

9.4 前后对比

优化前数据来自本报告第 4 节(同口径 N=8);优化后复测口径为 N=30。

接口 阶段 平均耗时 P95 P99 Max
GET /mini/client/products 优化前 759.10ms 798.84ms 798.84ms 868.60ms
GET /mini/client/products 优化后 207.93ms 267.75ms 268.58ms 275.34ms
GET /mini/client/price-list/current 优化前 724.00ms 785.51ms 785.51ms 841.48ms
GET /mini/client/price-list/current 优化后 236.53ms 284.95ms 285.54ms 290.60ms
  • 结论:
    • /mini/client/products 的 P95 下降约 66.5%;
    • /mini/client/price-list/current 的 P95 下降约 63.7%;
    • 两条客户端核心接口已从“接近风险阈值”降至稳定区间。