关于 swiftui-performance-audit
SwiftUI Performance Audit 是用于诊断和处理 SwiftUI 性能问题的技能,先审查代码,必要时再收集运行时分析证据。它帮助开发者将症状和证据对应到可能原因、修复方案及验证步骤。
主要功能
- 01分类性能症状
- 02检查 SwiftUI 常见代码问题
- 03指导收集运行时分析证据
- 04根据发现定位可能原因
- 05提出修复与验证步骤
适用场景
- 01排查滚动卡顿或渲染缓慢
- 02追查 CPU 或内存占用偏高
- 03分析卡死和过多视图更新
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dimillian/ skills --skill swiftui-performance-audit安装后在 Claude Code 中输入/swiftui-performance-audit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/code-smells.mddemystify-swiftui-performance-wwdc23.mdoptimizing-swiftui-performance-instruments.mdprofiling-intake.mdreport-template.mdunderstanding-hangs-in-your-app.mdunderstanding-improving-swiftui-performance.md详细介绍
SwiftUI 性能审计
快速开始
使用此技能先从代码入手诊断 SwiftUI 性能问题;如果仅靠代码审查无法解释症状,再请求性能分析证据。
工作流
- 对症状分类:渲染缓慢、滚动卡顿、CPU 使用率高、内存增长、卡顿无响应,或视图更新过于频繁。
- 如果有代码,先使用
references/code-smells.md进行代码优先审查。 - 如果没有代码,请求最小但有用的内容:目标视图、数据流、复现步骤和部署目标。
- 如果代码审查无法得出结论,或需要运行时证据,请使用
references/profiling-intake.md指导用户进行性能分析。 - 使用
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