התכונה 'סגנונות' פועלת בשלב הפריסה והציור של התכונה 'יצירה'. כך לא צריך ליצור משנים מבוססי-lambda, כי Styles תמיד מדלג על שלב ההרכבה.
השיפורים בביצועים בהשוואה לשימוש בהתאמות נובעים משלושה סוגים עיקריים של אופטימיזציות:
- הזזה של שלב: סגנונות לרוב מכוונים לשלב הציור. כשערך משתנה, Compose מבטל את התוקף רק של השלב המושפע (למשל, Redraw) במקום להפעיל Recomposition או Relayout מלאים.
- הקצאה עצלה: סגנונות דוחים את הקצאת משאבי האנימציה עד שאנימציה מתחילה בפועל. כך מצמצמים את כמות העבודה שנדרשת במהלך ההרכבה הראשונית.
- הפחתת התקורה של האובייקט: שינויים בשרשרת מקצים אובייקט לכל מאפיין (לדוגמה, ריווח פנימי, גבול). הסגנונות משתמשים בפונקציית lambda אחת כדי להחיל מאפיינים מרובים, וכך מצמצמים באופן משמעותי את הקצאות הזיכרון. אם סגנון [Style] מוגדר בערכת נושא, פונקציית הלמדה הזו משותפת לכל הרכיבים שמשתמשים באותה ערכת נושא.
בטבלה הבאה מוצגות תוצאות לדוגמה של מדדי ביצועים פנימיים של Styles ב-Compose 1.11.0-alpha06, בהשוואה להטמעה ב-Compose ללא Styles.
הבדיקה basic_box_border_change מדגישה את היתרון של מערכת הסגנונות במניעת הקצאה של אובייקטים מרובים של משנים במהלך עדכוני מאפיינים, וכתוצאה מכך חלה ירידה משמעותית של כ-77% בהקצאות, וירידה של כ-59% בזמן.
שיטת הבדיקה |
תיאור |
Time Change |
שינוי הקצאה |
הפעלת או השבתת צבע הגבול של |
-59.91% |
-77.22% |
|
השוואה בין מצבי ריחוף/מיקוד/לחיצה שמבוססים על סגנון לבין איסוף ידני של מצבי אינטראקציה. |
-5.24% |
14.72%- |
|
מדידת הקומפוזיציה והפריסה הראשוניות של |
-4.78% |
6.60%- |
|
הפונקציה מעבדת חמישה רכיבי |
+0.62% |
+2.41% |
|
השוואה בין הגדרת צבע טקסט באמצעות סגנון לבין שימוש ב- |
+5.86% |
+9.82% |