swiftui-performance-audit

swiftui-performance-audit

熱門

審查並改善 SwiftUI 執行時期效能,從程式碼審查與架構面著手。適用於診斷 SwiftUI 應用程式的緩慢渲染、滾動卡頓、高 CPU/記憶體使用率、過多畫面更新或佈局震盪等問題,並在僅靠程式碼審查不足時,引導使用者自行使用 Instruments 進行效能分析。

3828星標
203分支
更新於 2026/3/29
SKILL.md
readonlyread-only
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 呼叫樹的匯出檔案或截圖。
  • 裝置/OS/建置設定。
  • 正在分析的確切互動。
  • 若使用者在比較變更前後,提供前後指標。

確切的檢查清單與收集步驟請使用 references/profiling-intake.md

4. 分析與診斷

  • 將證據對應到最可能的類別:無效化、識別性變動、佈局震盪、主執行緒工作、圖片成本或動畫成本。
  • 根據影響程度而非解釋難易度來排定問題優先順序。
  • 區分程式碼層級的懷疑與有追蹤證據支援的結論。
  • 當效能分析仍不足時,指出需要哪些額外證據才能降低不確定性。

5. 修正

應用針對性的修正:

  • 縮小狀態範圍,減少廣泛觀察的扇出。
  • 穩定 ForEach 與列表的識別性。
  • 將大量工作移出 body,改為從輸入更新的衍生狀態、模型層預先計算、記憶化輔助函式或背景預處理。僅將 @State 用於畫面擁有的狀態,而非作為任意計算的臨時快取。
  • 僅在相等性檢查比重新計算子樹更便宜,且輸入確實具有值語義時,才使用 equatable()
  • 在渲染前對圖片進行降採樣。
  • 盡可能降低佈局複雜度或使用固定尺寸。

範例、Observation 特定的扇出指引與修正模式請使用 references/code-smells.md

6. 驗證

請使用者重新執行相同的擷取,並與基準指標比較。
若有提供,總結差異(CPU、掉幀數、記憶體峰值)。

輸出

提供:

  • 簡短指標表格(若有前後數據)。
  • 主要問題(依影響程度排序)。
  • 建議的修正與預估工時。

格式化最終審查報告時請使用 references/report-template.md

參考資料

  • 效能分析資訊收集與檢查清單:references/profiling-intake.md
  • 常見程式碼異味與修正模式:references/code-smells.md
  • 審查輸出範本:references/report-template.md
  • 當使用者提供時,將 Apple 文件與 WWDC 資源加入 references/ 目錄。
  • 使用 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