SKILL.md
readonly只读
name
swiftui-performance-audit
description
通过代码审查和架构分析,审计并提升 SwiftUI 运行时性能。适用于诊断 SwiftUI 应用中的慢渲染、滚动卡顿、高 CPU/内存使用、视图过度更新或布局抖动等问题,并在仅靠代码审查不足以定位时,指导用户使用 Instruments 进行性能分析。
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 调用树的导出或截图。
- 设备/操作系统/构建配置。
- 正在分析的具体交互。
- 如果用户正在比较变更前后的效果,提供前后指标。
使用 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 - 在
references/下添加用户提供的 Apple 文档和 WWDC 资源。 - 使用 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






