5.4 KiB
5.4 KiB
macOS 平台首消息性能测试报告(重启后新会话)
报告日期: 2026-03-24
测试平台: macOS
引擎类型: claude-code
日志来源: /Users/apple/.qimingclaw/logs/perf.2026-03-24.log
参考模板: docs/optimization/WINDOWS-FIRST-MESSAGE-PERF-REPORT-2026-03-23.md
执行摘要
本报告针对“重启客户端后首个新会话”进行性能核对。前端显示为 00:37,后端 PERF 日志显示两段关键新会话数据:
- 16:04 会话:仅记录到
sse.firstChunk,缺少sse.end,无法直接计算完整总时长。 - 16:07 会话:链路完整,可核算端到端耗时约 30.163s(
create-workspace -> sse.end)。
关键发现
| 指标 | 16:04 首会话(重启后) | 16:07 完整会话 | 说明 |
|---|---|---|---|
| create-workspace | 2730ms | 275ms | 16:07 工作区阶段明显更快(可能复用) |
| /chat 总耗时 | 148ms | 139ms | API 前置开销很小 |
| ensureEngine | 127ms | 121ms | 引擎准备并非瓶颈 |
| sse 首包延迟(connect->firstChunk) | 10.999s | 12.555s | 首包等待明显 |
| sse streaming | 缺失 | 17.333s | 仅 16:07 可核算 |
| 端到端(create-workspace->sse.end) | 缺失 | 30.163s | 前端 00:37 高于该值 |
一、测试会话数据
1.1 会话 A(重启后首个新会话,日志不完整)
| 时间 | session_id | create-workspace | /chat | ensureEngine | sse.connect | sse.firstChunk | sse.end |
|---|---|---|---|---|---|---|---|
| 16:04:54 | e418fa45-a2a5-4a77-8830-abe3449cbc9c |
2730ms | 148ms | 127ms | 16:04:54.608 | 16:05:05.607 | 缺失 |
可计算片段:
create-workspace -> sse.firstChunk=16:04:54.256 -> 16:05:05.607= 11.351ssse.connect -> sse.firstChunk= 10.999s
由于缺少
sse.end,无法直接验证该次会话是否对应前端显示的 00:37。
1.2 会话 B(后续完整新会话)
| 时间 | session_id | create-workspace | /chat | ensureEngine | sse.connect | sse.firstChunk | sse.end |
|---|---|---|---|---|---|---|---|
| 16:07:19 | 13711f68-795e-4517-ab4c-f0284ddc3070 |
275ms | 139ms | 121ms | 16:07:20.000 | 16:07:32.555 | 16:07:49.888 |
详细分解:
create-workspace -> /chat=16:07:19.697 -> 16:07:19.962= 0.265ssse.connect -> firstChunk= 12.555ssse streaming= 17.333s(日志直接给出)create-workspace -> sse.end=16:07:19.697 -> 16:07:49.888= 30.163s
二、性能分析
2.1 时间结构(基于完整会话 B)
总耗时(create-workspace -> sse.end): 30.163s
├── 前置阶段(workspace + chat + engine): ~0.265s(<1%)
├── 首包等待(sse.connect -> firstChunk): 12.555s(41.6%)
└── 流式输出(firstChunk -> end): 17.333s(57.5%)
结论:
- 当前主要耗时不在
ensureEngine(约 0.12s),而在 首包等待 + 流式输出阶段。 - 与“历史首消息慢主要在引擎准备”的模式不同,本次瓶颈更偏向模型响应阶段。
2.2 与前端 00:37 的差异
- 日志可完整核算值:30.163s(会话 B)。
- 前端显示值:37s。
- 差异约:6.8s。
可能原因(按优先级):
- 前端计时起点早于
create-workspace(例如点击发送或会话初始化前的 UI 阶段)。 - 16:04 首会话虽然日志缺
sse.end,但前端仍完成并纳入了完整计时。 - 前端停止计时点晚于
sse.end(渲染收尾、状态同步后才停止)。
三、结论与建议
3.1 结论
- 重启后首个新会话(16:04)链路不完整,无法直接从后端日志确认 37s。
- 后续完整会话(16:07)总耗时约 30.163s,量级接近但低于前端 37s。
- 当前瓶颈集中在 SSE 首包与流式阶段,
ensureEngine非主要问题。
3.2 建议
- 统一前后端计时口径:明确起点/终点并关联同一
rid/sessionId。 - 增加
sse.end丢失兜底埋点(取消、断流、窗口关闭等路径也记录结束事件)。 - 增补前端埋点字段:
frontend_timer_start_ts、frontend_timer_end_ts,与后端 PERF 同屏输出便于核对。
附录:原始日志摘录
[2026-03-24 16:04:54.256] [info] [PERF] create-workspace: 2730ms rid=[283ou9vg2]
[2026-03-24 16:04:54.569] [info] [PERF] /chat: 148ms rid=68d27799 (parseBody=8ms validate=1ms workspace=1ms engine=127ms chat=11ms)
[2026-03-24 16:04:54.608] [info] [PERF] sse.connect session=e418fa45-a2a5-4a77-8830-abe3449cbc9c
[2026-03-24 16:05:05.607] [info] [PERF] sse.firstChunk session=e418fa45-a2a5-4a77-8830-abe3449cbc9c
[2026-03-24 16:07:19.697] [info] [PERF] create-workspace: 275ms rid=[llrt9utmb]
[2026-03-24 16:07:19.962] [info] [PERF] /chat: 139ms rid=1107a1f7 (parseBody=7ms validate=1ms workspace=0ms engine=121ms chat=10ms)
[2026-03-24 16:07:20.000] [info] [PERF] sse.connect session=13711f68-795e-4517-ab4c-f0284ddc3070
[2026-03-24 16:07:32.555] [info] [PERF] sse.firstChunk session=13711f68-795e-4517-ab4c-f0284ddc3070
[2026-03-24 16:07:49.888] [info] [PERF] sse.end: 17333ms streaming session=13711f68-795e-4517-ab4c-f0284ddc3070
报告生成时间: 2026-03-24
备注: 本报告为 macOS 单平台分析,重点核对前端 00:37 与后端 PERF 的时间差。