當 Compose 更新影格時,會經過三個階段:
- 組合:Compose 會決定顯示內容,執行可組合函式並建構 UI 樹狀結構。
- 版面配置:Compose 會決定 UI 樹狀結構中每個元素的大小和位置。
- 繪圖:Compose 實際上會算繪個別 UI 元素。
Compose 可以視需求有意略過任何階段。舉例來說,假設單一圖形元素會在相同大小的兩個圖示之間進行切換。由於這個元素不會改變大小,且不會新增或移除 UI 樹狀結構中的元素,因此 Compose 可以略過可組合項及版面配置階段,只重新繪製這個元素。
不過,程式設計錯誤可能會讓 Compose 難以得知哪些階段可以安全略過,在這種情況下,Compose 會執行所有三個階段,進而導致 UI 速度變慢。因此,許多效能最佳做法都是為了協助 Compose 略過不需要的階段。
詳情請參閱「Jetpack Compose 階段」指南。
一般原則
一般來說,改善效能時需遵守幾項通用原則:
- 請盡可能將計算結果從可組合函式中移出。 只要有 UI 發生變更,就可能需要重新執行可組合函式。您放入可組合項中的任何程式碼都會重新執行,可能是針對動畫的每一個畫面重新執行。請將可組合項的程式碼限制為僅建構 UI 所需的程式碼。
- 盡可能延遲讀取狀態。將狀態讀取移至子項可組合項或後續階段,即可最小化重新組合或完全略過組合階段。為此,您可以傳遞 lambda 函式(而不是頻繁變更狀態的狀態值),以及在傳遞頻繁變更的狀態時首選 lambda 輔助鍵。如需這項技巧的範例,請參閱「遵循最佳做法」的「盡可能延遲讀取」一節。
其他資源
- 應用程式效能指南:瞭解改善 Android 效能的最佳做法、程式庫和工具。
- 檢查效能:檢查應用程式效能。
- 基準化:為應用程式效能設定基準。
- 應用程式啟動:改善應用程式啟動程序。
- 基準設定檔:瞭解基準設定檔。