# 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 日志显示两段关键新会话数据: 1. **16:04 会话**:仅记录到 `sse.firstChunk`,缺少 `sse.end`,无法直接计算完整总时长。 2. **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.351s** - `sse.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.265s** - `sse.connect -> firstChunk` = **12.555s** - `sse streaming` = **17.333s**(日志直接给出) - `create-workspace -> sse.end` = `16:07:19.697 -> 16:07:49.888` = **30.163s** --- ## 二、性能分析 ### 2.1 时间结构(基于完整会话 B) ```text 总耗时(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**。 可能原因(按优先级): 1. 前端计时起点早于 `create-workspace`(例如点击发送或会话初始化前的 UI 阶段)。 2. 16:04 首会话虽然日志缺 `sse.end`,但前端仍完成并纳入了完整计时。 3. 前端停止计时点晚于 `sse.end`(渲染收尾、状态同步后才停止)。 --- ## 三、结论与建议 ### 3.1 结论 1. 重启后首个新会话(16:04)链路不完整,无法直接从后端日志确认 37s。 2. 后续完整会话(16:07)总耗时约 **30.163s**,量级接近但低于前端 37s。 3. 当前瓶颈集中在 **SSE 首包与流式阶段**,`ensureEngine` 非主要问题。 ### 3.2 建议 1. 统一前后端计时口径:明确起点/终点并关联同一 `rid/sessionId`。 2. 增加 `sse.end` 丢失兜底埋点(取消、断流、窗口关闭等路径也记录结束事件)。 3. 增补前端埋点字段:`frontend_timer_start_ts`、`frontend_timer_end_ts`,与后端 PERF 同屏输出便于核对。 --- ## 附录:原始日志摘录 ```text [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 的时间差。*