SuperAPI AI 工具集

lynx-trace-analysis

测试与质量

查看项目

更新于 10-15 07:43

技能介绍

用途

Lynx Trace Analysis 是一个专注于分析 Lynx trace 数据、诊断性能问题并提供可执行优化策略的技能。它将自己定位为「Lynx Trace 分析专家」,核心任务是基于所提供的工具诊断性能问题。

主要能力

该技能围绕一组被称为「Guidebooks」的知识库指南来组织分析流程。已知的指南包括:

  • metrics-analysis:用于启动阶段、FCP/TTI、导航时序、白屏原因。
  • timing-flag:用于诊断缺失的性能回调、无效的时序标记(timing flags)、异常的 ActualFMP/FMP 时长。
  • jank-analysis:用于滚动流畅度、输入延迟、长任务(>16ms)、丢帧。
  • diff-analysis:用于对比两条 trace,识别特定阶段的回归。
  • nativemodule-analysis:用于桥接通信、原生方法延迟、序列化开销。
  • render-pipeline:用于理解 Lynx 渲染管线、识别慢阶段、分析指标之间的间隙。
  • sql-guide:用于编写原始 SQL 查询来查询 trace 数据。

技能的初始决策策略根据用户问题类型选择指南:针对具体聚焦型问题(如「FMP 为什么慢」「分析这次滚动的卡顿」),加载最相关的单一指南;针对宽泛探索型问题(如「分析这条 trace」),依次加载 metrics-analysis 与 jank-analysis 两个方面后再给出评估;针对对比型问题(如「将这条 trace 与上个版本对比」),加载 diff-analysis 并明确区分基线(baseline)与实验(experiment)trace。

工作方式

对每个用户请求,技能要求遵循 Think-Plan-Act 循环:

  1. THOUGHT:分析当前情况——已知什么、缺失什么数据。
  2. PLAN:列出寻找缺失数据的下一步逻辑步骤。
  3. ACTION:执行计划中最重要的一次工具调用。
  4. OBSERVATION:等待工具输出。

在执行任何深入分析之前,必须先获取对应的分析指南文档,并严格遵循该指南进行分析。此外还有一条全局格式规则:在文本(摘要、概览、建议)中引用具体 trace 事件时,必须保留其身份标识,格式为 [EventName]({id})。

输出格式

分析结果按以下结构输出:

  1. 执行摘要:2–3 句话给出主要瓶颈或根因结论。
  2. 数据证据与拆解表格:用 Markdown 表格呈现核心数据,列可根据分析类型调整。指标/管线类包含阶段名、时长(ms)、分析/说明,并在检测到阶段间间隔大于 10ms 时插入 [IDLE/GAP] 行;卡顿类包含线程、长任务名、时长(ms)、根因;NativeModule 类包含阶段(Platform/Wait/JS)、时长(ms)、占比(%)。瓶颈行需加粗高亮。
  3. 执行时间线与深入分析:3–6 句叙述事件顺序,指出突出的阶段与间隔。
  4. 按优先级排序的建议:2–5 条具体可执行建议,按高/中/低优先级排序,且必须严格基于「诊断逻辑与规则」和所提供的 trace 数据,数据不支持时不得给出通用建议。

使用方式

技能中的工具可通过以下 CLI 命令调用,无需额外配置(如 MCP)。所有 trace 查询命令都需要 -p, --path <path> 选项指定 trace 文件路径(可为 URL 或本地文件路径)。

Trace 查询命令:

命令 说明
id 按 slice ID 执行 trace 查询
time-window 执行时间窗口查询
aggregate 执行聚合查询
ancestors 查询某个 slice 的祖先
descendants 查询某个 slice 的后代
flow 查询某个 slice 的 flow 事件
metadata 查询 trace 元数据
lynxview 查询 LynxView 实例
pipeline 查询某个实例的管线 ID
pipeline-overview 查询管线概览事件
metrics 查询 Lynx 渲染指标
threads 查询 trace 中的所有线程
long-tasks 查询特定轨道上的长任务
sql 执行原始 SQL 查询

注意:使用 sql 前需先阅读 sql-guide 指南。

Trace 录制命令:

命令 说明
list-clients 列出可用客户端(已连接的应用)
start 开始录制 trace
end 停止录制并获取流句柄
readData 从流中读取并保存 trace 数据

录制命令支持的选项:-c, --client <clientId>(客户端 ID,必填);start 还支持 --enable-systrace、--js-profile-interval <interval>、--js-profile-type <type>;readData 支持 -s, --stream <stream>(必填)与 -o, --output <path>(输出文件路径)。

使用示例(查询):

$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs --help
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs id --id 381 --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs time-window --start 27110135.548086 --end 27110139 --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs aggregate --start 27110135.548086 --end 27110139 --name "TemplateName" --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs ancestors --id 4894 --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs descendants --id 4894 --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs flow --id 6808 --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metadata --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs lynxview --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs pipeline --instance-id "instance_123" --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs pipeline-overview --pipeline-id "pipeline_456" --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metrics --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs threads --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs long-tasks --track 6 --duration 16 --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs sql --query "SELECT * FROM slice LIMIT 10" --path "https://example.com/trace.pftrace"
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metadata --path "/path/to/local/trace.pftrace"

适用场景

适用于 Lynx 应用/页面的性能诊断,例如:定位 FMP/FCP/TTI 慢、白屏、首帧慢的原因;分析滚动卡顿、丢帧、长任务与输入延迟;诊断 NativeModule 延迟与桥接通信问题;排查性能回调缺失与时序标记异常;对比两条 trace 的回归;以及分析 Lynx 渲染管线各阶段耗时与阶段间隙。

限制

该技能要求 trace 数据以 Lynx trace 格式提供(.pftrace,可为 URL 或本地文件)。深入分析前必须先加载并遵循对应指南;原始 SQL 查询前需先阅读 sql-guide;建议必须基于诊断逻辑与 trace 数据,不得给出数据不支持的通用建议。其他具体限制暂未提供。