SuperAPI AI 工具集

chrome-devtools-memory-leak-debugging

测试与质量

查看项目

更新于 10-16 07:30

技能介绍

用途

该技能用于审计 JavaScript、浏览器或 Node.js 中的内存泄漏。它基于 Chrome DevTools MCP,通过复现内存增长、采集堆快照并分析泄漏,同时避免将原始堆产物直接加载到对话上下文中。

主要能力

  • 根据输入分派不同动作:
    • 空输入:询问泄漏症状、目标 URL/应用以及复现步骤。
    • 浏览器内存泄漏:围绕重复交互采集基线、目标和最终快照。
    • Node.js 内存泄漏:优先使用运行时原生堆快照或 memlab 兼容产物,再分析摘要。
    • 请求读取原始 .heapsnapshot:拒绝直接读取,改用 memlab 或有界分析命令。
    • 游离 DOM 节点:视为可疑,但不自动判定为错误;在修改有意缓存前先询问。
    • 修复验证:重复相同的交互循环,比较快照或 memlab 输出。

核心原则

  • 绝不直接读取原始 .heapsnapshot 文件,因为它们过大且容易处理不当。
  • 隔离泄漏来源:客户端浏览器状态、服务端 Node.js 还是测试框架状态。
  • 通过重复相同的用户交互循环来放大疑似泄漏。
  • 使用有界分析输出,而非原始快照内容。

浏览器工作流

  1. 导航到目标页面并达到稳定基线状态。
  2. 使用 take_memory_snapshot 将基线堆快照采集到版本控制之外的文件路径。
  3. 重复执行疑似交互,通常为 10 次。
  4. 采集目标堆快照。
  5. 尽可能回退交互,例如关闭模态框或离开页面。
  6. 采集最终堆快照。
  7. 使用 memlab 或其他有界工具分析快照。
  8. 将保留链映射回源代码,并提出最小修复方案。
  9. 修复后重复相同工作流进行验证。

常见泄漏模式

  • 未从长生命周期对象上移除的事件监听器。
  • 被变量、缓存、闭包或监听器保留的游离 DOM 节点。
  • 意外的全局变量或 window 挂载。
  • 闭包在不再需要后仍保留大对象。
  • 无界的数组、映射或应用缓存。

参考文件索引

  • references/common-leaks.md:常见浏览器和 JavaScript 泄漏模式;在将保留链映射到可能修复时阅读。
  • references/memlab.md:有界堆快照分析命令;在快照文件可用时阅读。
  • references/provenance.md:上游来源、提交、许可证和改编说明;在修改此技能或审计来源前阅读。

关键规则

  • 绝不将原始 .heapsnapshot 文件读入上下文。
  • 尽可能采集基线、目标和最终快照。
  • 在分析前重复疑似交互以放大泄漏。
  • 在用户确认游离 DOM 节点并非有意缓存前,将其视为可疑。
  • 通过重复相同的快照工作流验证修复。

规范词汇

  • 堆快照:保存为外部产物的浏览器或 Node.js 内存图。
  • 基线快照:疑似泄漏操作之前的快照。
  • 目标快照:重复疑似泄漏操作之后的快照。
  • 最终快照:尽可能回退操作之后的快照。
  • 保留链:显示对象为何仍可到达的分析输出。

验证契约

在声明技能更改完成前,运行 uv run wagents validate、uv run python skills/skill-creator/scripts/audit.py skills/chrome-devtools-memory-leak-debugging 以及 uv run wagents package chrome-devtools-memory-leak-debugging --dry-run。

适用场景

适用于浏览器端内存增长排查、Node.js 内存泄漏分析、游离 DOM 节点审计以及修复后的回归验证。

限制

该技能不直接读取原始 .heapsnapshot 文件;对游离 DOM 节点不自动判定为错误;具体收费、价格、平台支持等信息暂未提供。