SKILL.md
readonlyread-only
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 呼叫樹的匯出檔案或截圖。
- 裝置/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






