mcpField
S
swiftui-performance-audit

swiftui-performance-audit

github.com/dimillian测试与质量4.0k10.0k 次安装30 周前更新
代码仓库

关于 swiftui-performance-audit

SwiftUI Performance Audit 是用于诊断和处理 SwiftUI 性能问题的技能,先审查代码,必要时再收集运行时分析证据。它帮助开发者将症状和证据对应到可能原因、修复方案及验证步骤。

主要功能

  1. 01分类性能症状
  2. 02检查 SwiftUI 常见代码问题
  3. 03指导收集运行时分析证据
  4. 04根据发现定位可能原因
  5. 05提出修复与验证步骤

适用场景

  1. 01排查滚动卡顿或渲染缓慢
  2. 02追查 CPU 或内存占用偏高
  3. 03分析卡死和过多视图更新

安装

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

$npx skills add https://github.com/dimillian/skills --skill swiftui-performance-audit

安装后在 Claude Code 中输入/swiftui-performance-audit确认已加载。

包含的文件

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

agents/
openai.yaml
references/
code-smells.md
demystify-swiftui-performance-wwdc23.md
optimizing-swiftui-performance-instruments.md
profiling-intake.md
report-template.md
understanding-hangs-in-your-app.md
understanding-improving-swiftui-performance.md

详细介绍

SwiftUI 性能审计

快速开始

使用此技能先从代码入手诊断 SwiftUI 性能问题;如果仅靠代码审查无法解释症状,再请求性能分析证据。

工作流

  1. 对症状分类:渲染缓慢、滚动卡顿、CPU 使用率高、内存增长、卡顿无响应,或视图更新过于频繁。
  2. 如果有代码,先使用 references/code-smells.md 进行代码优先审查。
  3. 如果没有代码,请求最小但有用的内容:目标视图、数据流、复现步骤和部署目标。
  4. 如果代码审查无法得出结论,或需要运行时证据,请使用 references/profiling-intake.md 指导用户进行性能分析。
  5. 使用 references/report-template.md 总结可能的原因、证据、修复方案和验证步骤。

1. 收集信息

收集:

  • 目标视图或功能的代码。
  • 症状和准确的复现步骤。
  • 数据流:@State、@Binding、环境依赖项和可观察模型。
  • 问题是否出现在设备或模拟器上,以及是在 Debug 还是 Release 中观察到的。

尽可能请用户对问题进行分类:

  • CPU 峰值或电量消耗
  • 滚动卡顿或丢帧
  • 内存占用高或图像内存压力
  • 卡住或交互无响应
  • 视图更新过于频繁或范围异常宽泛

完整的性能分析信息收集清单请参阅 references/profiling-intake.md。

2. 代码优先审查

重点关注:

  • 由宽泛的观察或环境读取引发的失效风暴。
  • 列表和 ForEach 中不稳定的标识。
  • body 或视图构建器中的繁重派生计算。
  • 复杂层级、GeometryReader 或偏好链导致的布局抖动。
  • 在主线程上进行的大型图像解码或调整大小操作。
  • 应用范围过广的动画或转场。

详细的问题模式目录和修复指导请参阅 references/code-smells.md。

提供:

  • 附带代码引用的可能根本原因。
  • 建议的修复和重构方案。
  • 如有需要,提供最小复现示例或插桩建议。

3. 指导用户进行性能分析

如果代码审查无法解释问题,请请求运行时证据:

  • SwiftUI 时间线和 Time Profiler 调用树的跟踪导出文件或截图。
  • 设备、OS 和构建配置。
  • 正在进行性能分析的准确交互操作。
  • 如果用户在比较改动,请提供改动前后的指标。

准确的清单和数据收集步骤请参阅 references/profiling-intake.md。

4. 分析和诊断

  • 将证据对应到最可能的类别:失效、标识频繁变化、布局抖动、主线程工作、图像开销或动画开销。
  • 根据影响确定问题优先级,而不是根据解释难易程度排序。
  • 区分代码层面的疑点与有跟踪数据支持的证据。
  • 指出性能分析是否仍不充分,以及哪些额外证据有助于降低不确定性。

5. 修复

采取有针对性的修复措施:

  • 缩小状态作用范围,减少宽泛观察的扇出。
  • 稳定 ForEach 和列表的标识。
  • 将繁重工作移出 body,改为根据输入更新的派生状态、模型层预计算、记忆化辅助方法或后台预处理。仅在存储视图自身状态时使用 @State,不要将其用作任意计算的临时缓存。
  • 仅当相等性比较比重新计算子树开销更低,且输入确实具有值语义时,才使用 equatable()。
  • 在渲染前对图像进行降采样。
  • 尽可能降低布局复杂度或使用固定尺寸。

示例、Observation 专属的扇出指导和修复模式请参阅 references/code-smells.md。

6. 验证

请用户重新进行相同的采集,并与基线指标比较。 如果用户提供了数据,请总结变化(CPU、丢帧、内存峰值)。

输出

提供:

  • 简短的指标表(如有数据,列出改动前后)。
  • 按影响排序的主要问题。
  • 建议的修复方案及预估工作量。

请使用 references/report-template.md 编排最终审计报告。

参考资料

  • 性能分析信息收集与检查清单:references/profiling-intake.md
  • 常见代码异味及修复模式:references/code-smells.md
  • 审计输出模板:references/report-template.md
  • 用户提供 Apple 文档和 WWDC 资源后,将其添加到 references/ 下。
  • 使用 Instruments 优化 SwiftUI 性能:references/optimizing-swiftui-performance-instruments.md
  • 了解并改进 SwiftUI 性能:references/understanding-improving-swiftui-performance.md
  • 了解应用中的卡顿:references/understanding-hangs-in-your-app.md
  • 揭开 SwiftUI 性能的奥秘(WWDC23):references/demystify-swiftui-performance-wwdc23.md

评论

支持 Markdown