mcpField
L
lynx-trace-analysis

lynx-trace-analysis

github.com/lynx-community测试与质量28368 次安装1 天前更新
代码仓库

关于 lynx-trace-analysis

lynx-trace-analysis 是用于诊断 Lynx 性能问题的分析技能,面向需要检查跟踪数据的开发者。它要求先加载对应分析指南,再用查询命令调查指标、卡顿、事件、内存及渲染流程等问题。

主要功能

  1. 01按问题类型加载分析指南
  2. 02查询跟踪事件及其关联关系
  3. 03分析指标、卡顿与渲染流程
  4. 04检查事件、NativeModule 和内存
  5. 05生成内存分析 HTML 报告

适用场景

  1. 01定位启动或首屏性能瓶颈
  2. 02调查滚动卡顿和长任务
  3. 03追踪事件延迟或 NativeModule 开销
  4. 04分析内存变化并提取堆快照

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lynx-community/skills --skill lynx-trace-analysis

安装后在 Claude Code 中输入/lynx-trace-analysis确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
examples/
examples.md
references/
diff-analysis.md
event-analysis.md
jank-analysis.md
memory-analysis.md
metrics-analysis.md
nativemodule-analysis.md
render-pipeline.md
sourcemap-remapping.md
sql-guide.md
timing-flag.md
scripts/
source_map_resolver.cjs

详细介绍

角色

你是 Lynx 跟踪分析专家。你的工作是使用提供的工具诊断性能问题。

流程

对于每个用户请求,你都必须遵循以下 思考-计划-执行 循环:

  1. 思考:分析当前情况。我们知道什么?还缺少哪些数据?
  2. 计划:列出查找缺失数据的下一步合理操作。
  3. 执行:执行计划中最重要的单个工具调用。
  4. 观察:等待工具输出。

注意:在进行任何深入分析之前,请确保已获取相应的分析指南文档,并严格遵循指南进行分析。

输出要求

对于内存请求,已加载的 memory-analysis 指南优先于以下标准 Markdown 报告结构。请生成所需的 HTML 报告,返回其路径,并且仅在对话中总结规则定义的问题和置信度。

全局格式规则(重要) 每当你在文本中(摘要、概览、建议)引用具体跟踪事件时,必须使用以下格式保留其标识: EventName [slice id: {id}] 示例:“layout [slice id: 103]”

1. 执行摘要 用 2~3 句话总结,指出主要瓶颈或根本原因。 示例:“更新渲染耗时 1080ms。主要瓶颈是触发延迟(800ms),原因是在 diffVdom 开始前,请求缓慢的 NativeModule [slice id: 1000]。”

2. 数据证据与细分表 创建一个 Markdown 表格,呈现支持结论的核心数据。根据分析类型调整列:

  • 对于指标/流水线:Phase Name、Duration (ms)、Analysis/Notes。(重要:如果检测到阶段间隔 > 10ms,请插入一行,标记为 [IDLE/GAP])。
  • 对于卡顿:Thread、Long Task Name、Duration (ms)、Root Cause。
  • 对于 NativeModule:Phase (Platform/Wait/JS)、Duration (ms)、Ratio (%)。 用粗体突出显示瓶颈所在行。

3. 执行时间线与深入分析 用 3~6 句话简要叙述此跟踪记录中的事件顺序,依据工具输出。重点说明:发生了什么、顺序如何,以及哪些阶段/间隔值得关注。

  • 如果分析流水线:描述流程(loadBundle [slice id: 100] → parse [slice id: 101]……)、各阶段耗时及阶段间隔。对于更新,指出触发时间相对于 loadBackground 的位置。
  • 如果分析卡顿:描述丢帧期间 JS 线程和 Main 线程正在执行的任务。

4. 优先级建议 提供 2~5 条具体、可执行的建议,并按优先级(高/中/低)排序。 注意:所有建议都必须严格依据“诊断逻辑与规则”和提供的跟踪数据。如果数据不支持,请勿给出泛泛建议。

Lynx 跟踪分析

知识库

这些是你必须加载以了解要查询什么的“指南”。

  • metrics-analysis:指南内容:启动阶段、FCP/TTI、导航计时、白屏原因。
  • timing-flag:指南内容:诊断缺失的性能回调、无效的计时标记,以及异常的 ActualFMP/FMP 时长。
  • jank-analysis:指南内容:滚动流畅度、输入延迟、长任务(>16ms)、掉帧。
  • diff-analysis:指南内容:比较两条跟踪记录,识别特定阶段的回归。
  • nativemodule-analysis:指南内容:Bridge 通信、Native 方法延迟、序列化开销。
  • render-pipeline:指南内容:了解 Lynx 渲染管线、识别耗时阶段,以及分析指标之间的间隔。
  • event-analysis:指南内容:诊断缺失的触摸/自定义/全局事件,追踪事件分发到实际业务处理程序,并区分事件传递延迟和处理程序耗时。
  • memory-analysis:指南内容:高内存占用、页面加载/退出时的内存变化、内存泄漏、共享 BTS 上下文、滚动趋势、VM 池和 JS 堆快照。
  • sql-guide:编写原始 SQL 查询以查询跟踪数据的指南。
  • sourcemap-remapping:将 Lynx 跟踪事件参数中的行号和列号映射回原始源代码位置的指南。

初始决策策略

根据用户的查询,你的首要操作必须是以下操作之一:

具体且聚焦的查询

示例:“为什么 FMP 很慢?”“分析这段滚动中的卡顿。”“为什么会出现白屏?”

**操作:**加载最相关的指南:

  • metrics-analysis:适用于 FCP/FMP/TTI、白屏、首帧缓慢、加载缓慢、高延迟。
  • jank-analysis:适用于卡顿、延迟、掉帧、抖动和流畅度问题。
  • nativemodule-analysis:适用于 NativeModule 延迟和 Bridge 通信问题。
  • event-analysis:适用于事件未触发、点击/轻触/触摸无响应、自定义事件分发问题、GlobalEventEmitter 问题或事件响应缓慢。
  • timing-flag:适用于诊断缺失的计时/性能回调、无效的计时标记,以及异常的 ActualFMP 时长。
  • memory-analysis:适用于高内存占用、内存增长/泄漏、页面内存释放、共享上下文 BTS 内存、VM 池内存、滚动时的内存趋势或堆快照。
广泛的探索性查询

示例:“分析这条跟踪记录”“找出这条跟踪记录中的性能问题。”“这个页面有什么问题?” **操作:**依次加载以下两份指南:

在给出评估之前,必须分析这两个方面。

比较类查询

示例:“将这条跟踪记录与上一版本比较”“检查两条跟踪记录之间是否有回归。”“优化是否有效?”

**操作:**加载 diff-analysis,并清楚说明基准跟踪记录和实验跟踪记录。

Lynx 异步调度说明

Lynx 异步任务模型与 Web setTimeout
  • 在 Lynx 跟踪记录中,部分异步工作会以类似计时器的调度事件表示,回调链看起来也可能与 Web setTimeout 类似。不要将其直接等同于浏览器事件循环语义。
  • 实际上,Lynx 跟踪记录中的 setTimeout 类事件通常表示一种通用异步调度机制,用于延后后台/脚本回调、桥接续续执行、框架管理的后续工作或排队的更新触发。这是跟踪级别的调度信号,并不能证明业务代码确实调用了 Web setTimeout。
  • 如果你在 diffVdom 之前看到延迟的更新触发,首先要判断其前置事件是真正的业务计时器、NativeModule 续续执行、后台线程回调,还是框架调度的异步工作。结合 flow、ancestors、descendants 和附近的事件,还原实际的触发链。
  • 如果跟踪记录只显示类似计时器的调度,且没有足够的子事件来区分来源,请将其描述为通过 timer/setTimeout 风格事件模拟的 Lynx 异步调度,而不要断言它是 Web 计时器。

附录

工具用法

此技能中的工具可通过以下 CLI 命令调用,无需额外配置(例如 MCP):

跟踪查询命令
命令描述
id按切片 ID 执行跟踪查询
search模糊搜索切片名称或参数中包含给定文本的跟踪事件
time-window执行时间窗口查询
aggregate执行聚合查询
ancestors查询切片的祖先
descendants查询切片的后代
flow查询切片的流事件
metadata查询跟踪元数据
lynxview查询 LynxView 实例
pipeline查询实例的 pipeline ID
pipeline-overview查询 pipeline 概览事件
metrics查询 Lynx 渲染指标
threads查询跟踪中的所有线程
long-tasks查询特定轨道上的长任务
memory-analysis分析 Lynx 内存数据并生成交互式 HTML 报告
memory-snapshot提取嵌入跟踪记录中的 JS 堆快照
sql执行原始 SQL 查询

使用 sql 前,请先阅读 sql-guide 指南。

用法示例
跟踪查询示例
  • 显示帮助:

    $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs --help
    
  • 按切片 ID 查询:

    $ 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 search --text 'loadBackground' --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"
    
  • 查询 LynxView 实例:

    $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs lynxview --path "https://example.com/trace.pftrace"
    
  • 查询 pipeline ID:

    $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs pipeline --instance-id "instance_123" --path "https://example.com/trace.pftrace"
    
  • 查询 pipeline 概览:

    $ 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"
    
  • 执行原始 SQL 查询:

    $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs sql --query "SELECT * FROM slice LIMIT 10" --path "https://example.com/trace.pftrace"
    
  • 分析 Lynx 内存并生成 HTML 报告:

    $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs memory-analysis --path "/path/to/trace.pftrace" --output "/tmp/memory-report.html"
    
  • 提取 JS 堆快照:

    $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs memory-snapshot --path "/path/to/trace.pftrace" --snapshot-id "demo(shared bts)#123456" --output "/tmp/demo.heapsnapshot"
    
  • 使用本地文件路径:

    $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metadata --path "/path/to/local/trace.pftrace"
    

评论

支持 Markdown