Compose 階段和效能

當 Compose 更新影格時,會經過三個階段:

  • 組合:Compose 會決定顯示內容,執行可組合函式並建構 UI 樹狀結構。
  • 版面配置:Compose 會決定 UI 樹狀結構中每個元素的大小和位置。
  • 繪圖:Compose 實際上會算繪個別 UI 元素。

Compose 可以視需求有意略過任何階段。舉例來說,假設單一圖形元素會在相同大小的兩個圖示之間進行切換。由於這個元素不會改變大小,且不會新增或移除 UI 樹狀結構中的元素,因此 Compose 可以略過可組合項及版面配置階段,只重新繪製這個元素。

不過,程式設計錯誤可能會讓 Compose 難以得知哪些階段可以安全略過,在這種情況下,Compose 會執行所有三個階段,進而導致 UI 速度變慢。因此,許多效能最佳做法都是為了協助 Compose 略過不需要的階段。

詳情請參閱「Jetpack Compose 階段」指南。

一般原則

一般來說,改善效能時需遵守幾項通用原則:

  • 請盡可能將計算結果從可組合函式中移出。 只要有 UI 發生變更,就可能需要重新執行可組合函式。您放入可組合項中的任何程式碼都會重新執行,可能是針對動畫的每一個畫面重新執行。請將可組合項的程式碼限制為僅建構 UI 所需的程式碼。
  • 盡可能延遲讀取狀態。將狀態讀取移至子項可組合項或後續階段,即可最小化重新組合或完全略過組合階段。為此,您可以傳遞 lambda 函式(而不是頻繁變更狀態的狀態值),以及在傳遞頻繁變更的狀態時首選 lambda 輔助鍵。如需這項技巧的範例,請參閱「遵循最佳做法」的「盡可能延遲讀取」一節。

其他資源