用途
SwiftUI Performance Audit 用于从代码审查和性能分析证据中诊断 SwiftUI 性能问题。它适合在用户报告渲染缓慢、滚动卡顿、布局抖动或 CPU 占用过高时使用,也适合需要“代码优先”审查、并在必要时结合 Instruments 指导的场景。
主要能力
该技能的工作流程分为六个阶段:
- 症状分类:将问题归类为渲染缓慢、滚动卡顿、高 CPU、内存增长、卡死或视图更新过多。
- 代码优先审查:若代码可用,依据 references/code-smells.md 进行审查,重点关注:由宽泛观察或环境读取导致的失效风暴、列表和 ForEach 中不稳定的标识、body 或视图构建器中的重负载派生工作、复杂层级或 GeometryReader 或 preference 链导致的布局抖动、主线程上的大图像解码或缩放、应用范围过广的动画或过渡。
- 引导性能分析:若代码审查无法解释问题,则请求运行时证据,包括 SwiftUI 时间线和 Time Profiler 调用树的 trace 导出或截图、设备/系统/构建配置、被分析的确切交互、以及对比变更时的前后指标。
- 分析与诊断:将证据映射到最可能的类别(失效、标识变动、布局抖动、主线程工作、图像开销或动画开销),按影响而非解释难度排序问题,区分代码层面的怀疑与 trace 支撑的证据,并指出性能分析仍不充分之处及还需哪些额外证据。
- 修复:应用针对性修复,包括收窄状态作用域、减少宽泛观察的扇出、稳定 ForEach 和列表的标识、将重负载工作移出 body(改为从输入更新的派生状态、模型层预计算、记忆化辅助函数或后台预处理)、仅在相等性比较比重算子树更廉价且输入真正为值语义时使用 equatable()、渲染前对图像降采样、降低布局复杂度或尽可能使用固定尺寸。
- 验证:要求用户重新运行相同采集并与基线指标对比,若提供则汇总差值(CPU、丢帧、内存峰值)。
使用方式
该技能以代码审查为起点。若代码不可用,则请求最小可用切片:目标视图、数据流、复现步骤和部署目标。数据流需收集 @State、@Binding、环境依赖和可观察模型。还需确认问题出现在设备还是模拟器,以及是在 Debug 还是 Release 中观察到的。若代码审查无定论或需要运行时证据,则引导用户使用 Instruments 进行性能分析。最终输出包括:简短指标表(如有前后对比)、按影响排序的首要问题、以及带预估工作量的修复建议。
适用场景
适用于 SwiftUI 应用中出现以下症状时:CPU 峰值或电池消耗、滚动卡顿或丢帧、高内存或图像压力、卡死或交互无响应、视图更新过多或异常宽泛。
限制
仅当任务明确匹配上述范围时使用此技能。不得将输出视为环境特定验证、测试或专家审查的替代品。若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。
参考资料
- 性能分析采集与收集清单:references/profiling-intake.md
- 常见代码坏味道与修复模式:references/code-smells.md
- 审查输出模板:references/report-template.md
- 使用 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