技能|Web端点性能剖面定位法
> 适用系统:HFMS(纯标准库 Web)。任何"页面/接口响应慢、不知瓶颈在哪"的本地 Web 系统通用。
> 版本:v1.0.0 归档日期:2026-10-03 形态:zip 内含单一 技能|Web端点性能剖面定位法.md
适用场景
- 某页面/接口响应秒级,但不知道慢在哪一段(建连?查询?模型?模板拼装?),需要可复现地定位再精准优化,避免"感觉慢就全栈重构"造成屎山。
- 典型:首页仪表盘 ~2.77s、制度问答首问 ~8s;本技能把它们分别归因为"每请求 18+ 次建连"和"AI 冷启动"。
操作步骤
- 单实例确认:先
netstat确认 8765 只有 1 个实例——多实例会命中旧代码,测出的不是当前逻辑。 - 计时探针:在目标 handler 入口/出口用
time.perf_counter()打点,分别测"端到端总耗时 / DB 查询累计 / 模型调用 / 模板渲染"各段耗时。 - 端到端复测:本地用
http.client直连localhost:8765测真实响应耗时(urllib受代理影响会报 502;curl加--noproxy '*')。 - 分层归因:
- DB 慢 → 查是否每查重开连接(见《SQLite连接复用与查询提速法》)。
- 模型慢 → 是否冷启动(见《AI模型冷启动消除法》)。
- 模板慢 → 是否循环查库拼 HTML。 - 精准修复:只改瓶颈段,最小侵入(不动无关代码);修复后用同一探针复测量化提升。
- 回归兜底:改完必跑《全页面回归冒烟法》确认无新错误/空页/悬空。
注意边界
- 计时要在生产等价路径(同一数据量)下测,避免空库误判"已很快"。
- 取多次稳定值:冷启动需先预热再测,否则把一次性开销算进常态。
- 探针仅用于诊断:测完移除或置 DEBUG 开关,不留在生产代码。
反例避雷
- 不要"感觉慢就全栈重构":先量再改,禁止屎山(工程原则第一条)。
- 不要只看单次:取稳定值,冷启动需预热后测。
- 不要把探针留在生产:既影响读数又污染代码。
- 不要只优化"看得见的":有时瓶颈在 DB 连接而非 SQL 本身。
关联笔记
- SQLite连接复用与查询提速法:DB 慢段的修复。
- AI模型冷启动消除法:模型冷启段的修复。
- 全页面回归冒烟法:任何性能改动后必跑,验收=错误 0 + 空页 0 + 悬空 0。
- 纯标准库本地Web系统搭建:性能优化的底座前提。
实战战绩
- 定位
/overview瓶颈=每请求 18+ 次建连(~70ms×18≈1.3s+)→ 归并线程级复用后 67ms(约 34×)。 - 定位制度问答首问慢=AI 冷启动 ~8s → 启动预热后消除;
Ollama /api/ps验证模型常驻。 - 全程未重构无关代码,仅改瓶颈两段 + 三旋钮(默认保持原行为)。
版本记录
- v1.0.0(2026-10-03):首版。从本次性能优化实战提炼,作为"先量后改"的方法论闭环。