name: swiftui-performance-audit
description: 从代码审查和性能剖析证据中审计 SwiftUI 性能问题。
risk: safe
source: “Dimillian/Skills (MIT)”
date_added: “2026-03-25”
SwiftUI 性能审计
快速开始
使用本技能先从代码入手诊断 SwiftUI 性能问题,当仅靠代码审查无法解释症状时,再请求性能剖析证据。
何时使用
- 当用户报告 SwiftUI 渲染慢、滚动卡顿、布局抖动或高 CPU 时。
- 当你需要代码优先审计,且如果需要性能剖析证据时提供 Instruments 指导时。
工作流
- 对症状进行分类:渲染慢、滚动卡顿、高 CPU、内存增长、卡死(hangs)或过多的视图更新。
- 如果代码可用,使用
references/code-smells.md从代码优先审查开始。 - 如果代码不可用,索取最有用的最小切片:目标视图、数据流、复现步骤和部署目标。
- 如果代码审查无定论或需要运行时证据,使用
references/profiling-intake.md指导用户进行性能剖析。 - 使用
references/report-template.md总结可能的原因、证据、修复和验证步骤。
1. 信息收集(Intake)
收集:
- 目标视图或功能代码。
- 症状和精确的复现步骤。
- 数据流:
@State、@Binding、环境依赖和可观察模型。 - 问题是在设备还是模拟器上出现,以及是在 Debug 还是 Release 中观察到的。
如果可能,让用户对问题进行分类:
- CPU 尖峰或电池消耗
- 滚动卡顿或掉帧
- 高内存或图像压力
- 卡死或无响应的交互
- 过多或异常广泛的视图更新
完整的性能剖析信息收集清单,请阅读references/profiling-intake.md。
2. 代码优先审查
重点关注:
- 广泛观察或环境读取导致的失效风暴。
- 列表和
ForEach中不稳定的身份。 body或视图构建器中的重量级派生工作。- 复杂层级、
GeometryReader或偏好链导致的布局抖动。 - 主线程上的大型图像解码或调整大小工作。
- 应用得过宽的动画或过渡工作。
使用references/code-smells.md获取详细的异味目录和修复指导。
提供:
- 带代码引用的可能根本原因。
- 建议的修复和重构。
- 如果需要,提供最小复现或插桩建议。
3. 引导用户进行性能剖析
如果代码审查无法解释问题,索取运行时证据:
- trace 导出或 SwiftUI 时间线和 Time Profiler 调用树的截图。
- 设备/OS/构建配置。
- 正在剖析的确切交互。
- 如果用户在比较改动,提供前后指标。
使用references/profiling-intake.md获取确切的清单和收集步骤。
4. 分析与诊断
- 将证据映射到最可能的类别:失效、身份抖动、布局抖动、主线程工作、图像成本或动画成本。
- 按影响排序问题,而不是按解释的容易程度。
- 区分代码级怀疑与 trace 支撑的证据。
- 指出性能剖析仍然不足的地方,以及哪些额外证据会减少不确定性。
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/下。 - Optimizing SwiftUI performance with Instruments:
references/optimizing-swiftui-performance-instruments.md - Understanding and improving SwiftUI performance:
references/understanding-improving-swiftui-performance.md - Understanding hangs in your app:
references/understanding-hangs-in-your-app.md - Demystify SwiftUI performance(WWDC23):
references/demystify-swiftui-performance-wwdc23.md
限制
- 仅当任务明确匹配上述范围时使用本技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少所需的输入、权限、安全边界或成功标准,停下来询问澄清。