使用樣式提升效能

根據設計,樣式會在 Compose 的版面配置和繪圖階段運作。這樣一來,您就不必建立 lambda 型修飾符,因為 Styles 一律會略過組合階段。

Compose 的階段和樣式執行位置
圖 1. Compose 的階段和 Styles 的執行位置。

修飾符的成效提升主要來自於三項最佳化措施:

  • 階段轉移:樣式通常會以「繪製」階段為目標。當值變更時,Compose 只會使受影響的階段失效 (例如「重新繪製」),而不會觸發完整的重組或重新配置。
  • 延遲分配:樣式會延遲分配動畫資源,直到動畫實際開始播放為止。這樣可減少初始組合期間所需的工作。
  • 減少物件負擔:鏈結修飾符會為每個屬性 (例如邊框間距、邊框) 分配物件。樣式會使用單一 lambda 套用多個屬性,大幅減少記憶體配置。如果主題中定義了 Style,使用該主題的所有元件都會共用該 lambda。

下表顯示內部效能基準的說明結果,比較對象為使用 Styles 的 Compose 1.11.0-alpha06,以及不使用 Styles 的 Compose 實作。

這項basic_box_border_change測試凸顯了樣式系統的優勢,可避免在屬性更新期間分配多個修飾符物件,進而大幅減少約 77% 的分配作業,並縮短約 59% 的時間。

測試方法

說明

時間變更

分配變更

basic_box_border_change

切換 Box 的邊框顏色,以評估更新效能。

-59.91%

-77.22%

input_state_basic_box

比較以樣式為準的懸停/焦點/按壓狀態,與手動互動狀態集合。

-5.24%

-14.72%

basic_box

測量具有五個鏈結修飾符的 Box 初始組成和版面配置。

-4.78%

-6.60%

basic_text

使用硬式編碼字串算繪五個 BasicText 元件。

+0.62%

+2.41%

basic_text_provided_color

比較透過樣式設定文字顏色與使用 CompositionLocalProvider 的差異。

+5.86%

+9.82%