
关于
从代码审查和性能分析证据中审计 SwiftUI 性能问题。
name: swiftui-performance-audit description: 通过代码审查和性能分析证据审计 SwiftUI 性能问题。 risk: safe source: "Dimillian/Skills (MIT)" date_added: "2026-03-25"
SwiftUI 性能审计
快速开始
使用此技能从代码入手诊断 SwiftUI 性能问题,然后在仅靠代码审查无法解释症状时请求性能分析证据。
何时使用
- 当用户报告渲染缓慢、滚动卡顿、布局抖动或 SwiftUI 中 CPU 占用高时。
- 当你需要代码优先审计加上 Instruments 指导(如果需要性能分析证据)时。
工作流程
- 分类症状:渲染缓慢、滚动卡顿、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()。 - 在渲染前对图片进行降采样。
- 减少布局复杂度或在可能的地方使用固定尺寸。
使用 references/code-smells.md 获取示例、Observation 特定的扇出指导和修复模式。
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.md
兼容工具
Claude CodeCursor
标签
移动端