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

相較於修飾符,這項功能在效能方面有顯著提升,主要歸功於下列三項最佳化措施:
- 階段轉移:樣式通常會以「繪製」階段為目標。當值變更時,Compose 只會使受影響的階段失效 (例如「重新繪製」),而不會觸發完整的「重新組合」或「重新配置」。
- 延遲分配:樣式會延遲分配動畫資源,直到動畫實際開始播放為止。這樣可減少初始組合期間所需的工作。
- 減少物件負擔:鏈結修飾符會為每個屬性 (例如邊框間距、邊框) 分配物件。樣式會使用單一 lambda 套用多個屬性,大幅減少記憶體配置。如果主題中定義了 Style,使用該主題的所有元件都會共用該 lambda。
下表顯示 Compose 1.11.0-alpha06 的 Styles 內部效能基準測試結果,並與不使用 Styles 的 Compose 實作項目進行比較。
這項basic_box_border_change測試凸顯了樣式系統的優勢,可避免在屬性更新期間分配多個修飾符物件,進而大幅減少約 77% 的分配量,以及約 59% 的時間。
測試方法 |
說明 |
時間變更 |
分配變更 |
切換 |
-59.91% |
-77.22% |
|
比較基於樣式的懸停/焦點/按壓狀態,與手動互動狀態集合。 |
-5.24% |
-14.72% |
|
測量具有五個鏈結修飾符的 |
-4.78% |
-6.60% |
|
使用硬式編碼字串算繪五個 |
+0.62% |
+2.41% |
|
比較透過樣式設定文字顏色與使用 |
+5.86% |
+9.82% |