Files
qiming/qimingclaw/crates/agent-electron-client/docs/optimization/MACOS-FIRST-MESSAGE-PERF-REPORT-2026-03-24.md

122 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.555s41.6%
└── 流式输出firstChunk -> end: 17.333s57.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 的时间差。*