关于 guide-swiftui-performance-audit
guide-swiftui-performance-audit 是一项诊断 SwiftUI 性能问题的工作流指南,面向开发者从代码审查开始,并在证据不足时收集运行时分析数据。它涵盖问题分类、修复建议和前后验证。
主要功能
- 01按症状分类性能问题
- 02从代码着手检查常见问题
- 03指导收集运行时分析证据
- 04提出针对性修复建议
- 05依据基线验证改动
适用场景
- 01排查滚动卡顿或掉帧
- 02分析 CPU 或内存占用
- 03调查视图更新过多
- 04比较修复前后的性能数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ prisma-labs-dev/ apple-skills --skill guide-swiftui-performance-audit安装后在 Claude Code 中输入/guide-swiftui-performance-audit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/code-smells.mddemystify-swiftui-performance-wwdc23.mdoptimizing-swiftui-performance-instruments.mdprofiling-intake.mdreport-template.mdunderstanding-hangs-in-your-app.mdunderstanding-improving-swiftui-performance.md详细介绍
Guide Skill — 这是专家工作流/模式指南,并非 API 参考文档。 最初来自 Thomas Ricouard 的 Dimillian/Skills。MIT License。
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