用途:测量用户实际等待的慢交互(点击卡顿、视图打开抖动、耗时不明的请求),覆盖 RPC 与渲染。与 pprof 不同,pprof 用于 Go 热路径,两者数值不可比。
主要能力:usePerf 记录 span(名称、时长、自由属性)到 Go 侧拥有的 JSONL 文件,保留每个样本、写入时不聚合,便于发现异常值。支持三种埋点方式:perf.track 包裹同步或异步工作(抛错仍记录 failed:true 并重抛)、perf.start/end 手动开关 span、perf.record 上报外部测得的时长。属性上限 32 个,每个键或字符串值 512 字节,超限或格式错误的样本会被静默丢弃。
使用方式:先确认 development.perf.enabled 开启,可用 grep HIVE_DESKTOP_DEVELOPMENT_PERF_ENABLED launch.env 检查,缺失时运行 mise run desktop:dev:prepare;前端可用 perfInfo() 查询路径。在组件中 import { usePerf } from '../composables/usePerf',以 const perf = usePerf('feed') 指定 scope。样本每 2 秒或缓冲 256 条或 pagehide 时刷新。用 mise run desktop:dev 或 mise run desktop:serve 驱动应用,通过 launch.env 中的 HIVE_DESKTOP_DATA_DIR 定位 perf.jsonl,运行前可用 : > "$PERF" 清空。分析用 jq:按 scope+name 分组统计数量与 p50/p95/max,按 durationMs 排序取最慢样本,按属性分组比较,筛选 failed 样本,并用 seq 重建时序。
适用场景:定位前端交互性能瓶颈、比较修复前后同一操作名的 p95。
限制:埋点名称必须稳定,变化值放入 attrs,否则无法聚合;不要在紧凑渲染循环中埋点,文件上限 8 MB 并保留一代 perf.jsonl.1;不要添加聚合、汇总端点或指标导出;文件仅留在本机,可能含仓库名、条目 id 和路径,属本地诊断数据,不应整体粘贴到 issue。埋点可保留,发布构建中不生效。