返回顶部
s

swiftui-performance-auditSwiftUI性能审计

Audit and improve SwiftUI runtime performance from code review and architecture. Use for requests to diagnose slow rendering, janky scrolling, high CPU/memory usage, excessive view updates, or layout thrash in SwiftUI apps, and to provide guidance for user-run Instruments profiling when code review alone is insufficient.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
2,891
下载量
免费
免费
4
收藏
概述
安装方式
版本历史

swiftui-performance-audit

SwiftUI 性能审计

归属:复制自 @Dimillian 的 Dimillian/Skills(2025-12-31)。

概述

端到端审计 SwiftUI 视图性能,涵盖从检测和基线建立到根本原因分析和具体修复步骤。

工作流决策树

  • - 如果用户提供代码,从代码优先审查开始。
  • 如果用户仅描述症状,要求提供最小代码/上下文,然后进行代码优先审查。
  • 如果代码审查无结论,进入引导用户进行性能分析并请求跟踪或截图。

1. 代码优先审查

收集:

  • - 目标视图/功能代码。
  • 数据流:状态、环境、可观察模型。
  • 症状和复现步骤。

重点关注:

  • - 由宽泛状态变化引起的视图失效风暴。
  • 列表中的不稳定标识(id 频繁变化、每次渲染生成 UUID())。
  • body 中的繁重工作(格式化、排序、图像解码)。
  • 布局抖动(深层堆栈、GeometryReader、偏好链)。
  • 未进行降采样或调整大小的大图像。
  • 过度动画层级(大型树上的隐式动画)。

提供:

  • - 可能的根本原因及代码引用。
  • 建议的修复和重构方案。
  • 如有需要,提供最小复现或检测建议。

2. 引导用户进行性能分析

解释如何使用 Instruments 收集数据:

  • - 使用 Instruments 中的 SwiftUI 模板(Release 构建)。
  • 复现精确交互(滚动、导航、动画)。
  • 捕获 SwiftUI 时间线和时间分析器。
  • 导出或截图相关通道和调用树。

请求提供:

  • - 跟踪导出或 SwiftUI 通道 + 时间分析器调用树的截图。
  • 设备/操作系统/构建配置信息。

3. 分析与诊断

优先排查常见的 SwiftUI 问题:

  • - 由宽泛状态变化引起的视图失效风暴。
  • 列表中的不稳定标识(id 频繁变化、每次渲染生成 UUID())。
  • body 中的繁重工作(格式化、排序、图像解码)。
  • 布局抖动(深层堆栈、GeometryReader、偏好链)。
  • 未进行降采样或调整大小的大图像。
  • 过度动画层级(大型树上的隐式动画)。

根据跟踪/日志证据总结发现。

4. 修复

应用针对性修复:

  • - 缩小状态作用域(@State/@Observable 更靠近叶子视图)。
  • 稳定 ForEach 和列表的标识。
  • 将繁重工作移出 body(预计算、缓存、@State)。
  • 对昂贵的子树使用 equatable() 或值包装器。
  • 在渲染前对图像进行降采样。
  • 减少布局复杂度或在可能的情况下使用固定尺寸。

常见代码异味(及修复)

在代码审查中查找以下模式。

body 中的昂贵格式化器

swift
var body: some View {
let number = NumberFormatter() // 慢速分配
let measure = MeasurementFormatter() // 慢速分配
Text(measure.string(from: .init(value: meters, unit: .meters)))
}

优先在模型或专用辅助类中缓存格式化器:

swift
final class DistanceFormatter {
static let shared = DistanceFormatter()
let number = NumberFormatter()
let measure = MeasurementFormatter()
}

执行繁重工作的计算属性

swift
var filtered: [Item] {
items.filter { $0.isEnabled } // 每次 body 求值时运行
}

优先在变化时预计算或缓存:

swift
@State private var filtered: [Item] = []
// 当输入变化时更新 filtered

在 body 或 ForEach 中排序/过滤

swift
List {
ForEach(items.sorted(by: sortRule)) { item in
Row(item)
}
}

优先在视图更新前一次性排序:

swift
let sortedItems = items.sorted(by: sortRule)

在 ForEach 中内联过滤

swift
ForEach(items.filter { $0.isEnabled }) { item in
Row(item)
}

优先使用具有稳定标识的预过滤集合。

不稳定标识

swift
ForEach(items, id: \.self) { item in
Row(item)
}

避免对非稳定值使用 id: \.self;使用稳定 ID。

在主线程上解码图像

swift
Image(uiImage: UIImage(data: data)!)

优先在主线程外解码/降采样并存储结果。

可观察模型中的宽泛依赖

swift
@Observable class Model {
var items: [Item] = []
}

var body: some View {
Row(isFavorite: model.items.contains(item))
}

优先使用细粒度视图模型或逐项状态以减少更新扇出。

5. 验证

要求用户重新运行相同的捕获并与基线指标进行比较。
如果提供,总结差异(CPU、帧率下降、内存峰值)。

输出

提供:

  • - 简短指标表(如有前后对比)。
  • 主要问题(按影响排序)。
  • 建议修复及预估工作量。

参考资料

根据用户提供的资料,在 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

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 swiftui-performance-audit-1776396383 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 swiftui-performance-audit-1776396383 技能

通过命令行安装

skillhub install swiftui-performance-audit-1776396383

下载

⬇ 下载 swiftui-performance-audit v1.0.0(免费)

文件大小: 7.37 KB | 发布时间: 2026-4-17 15:37

v1.0.0 最新 2026-4-17 15:37

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部