swiftui-performance-audit

swiftui-performance-audit

热门

通过代码审查和架构分析,审计并提升 SwiftUI 运行时性能。适用于诊断 SwiftUI 应用中的慢渲染、滚动卡顿、高 CPU/内存使用、视图过度更新或布局抖动等问题,并在仅靠代码审查不足以定位时,指导用户使用 Instruments 进行性能分析。

3828Star
203Fork
更新于 2026/3/29
SKILL.md
readonly只读
name
swiftui-performance-audit
description

通过代码审查和架构分析,审计并提升 SwiftUI 运行时性能。适用于诊断 SwiftUI 应用中的慢渲染、滚动卡顿、高 CPU/内存使用、视图过度更新或布局抖动等问题,并在仅靠代码审查不足以定位时,指导用户使用 Instruments 进行性能分析。

SwiftUI 性能审计

快速开始

使用本技能首先从代码层面诊断 SwiftUI 性能问题,当仅靠代码审查无法解释症状时,再请求性能分析证据。

工作流程

  1. 分类症状:慢渲染、滚动卡顿、高 CPU、内存增长、挂起或视图过度更新。
  2. 如果代码可用,使用 references/code-smells.md 进行代码优先审查。
  3. 如果代码不可用,请求最小的有用片段:目标视图、数据流、复现步骤和部署目标。
  4. 如果代码审查无法得出结论或需要运行时证据,使用 references/profiling-intake.md 指导用户进行性能分析。
  5. 使用 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