הסגנונות פועלים בשלב הפריסה והציור של הכתיבה. כך לא צריך ליצור משנים מבוססי-lambda, כי Styles תמיד מדלג על שלב ההרכבה.
השיפורים בביצועים בהשוואה למשני הצעות מחיר נובעים משלושה תהליכי אופטימיזציה עיקריים:
- הזזה של שלב: סגנונות לרוב מכוונים לשלב הציור. כשערך משתנה, Compose מבטל את התוקף רק של השלב המושפע (למשל, Redraw) במקום להפעיל Recomposition או Relayout מלאים.
- הקצאה עצלה: סגנונות דוחים את הקצאת משאבי האנימציה עד שאנימציה מתחילה בפועל. כך מצטמצמת כמות העבודה שנדרשת במהלך ההרכבה הראשונית.
- הפחתת התקורה של האובייקט: שינויים בשרשרת מקצים אובייקט לכל מאפיין (לדוגמה, ריווח פנימי, גבול). הסגנונות משתמשים בפונקציית lambda אחת כדי להחיל כמה מאפיינים, וכך מצמצמים משמעותית את הקצאות הזיכרון. אם סגנון (Style) מוגדר בערכת נושא, פונקציית ה-lambda הזו משותפת לכל הרכיבים שמשתמשים בנושא הזה.
בטבלה הבאה מוצגות תוצאות לדוגמה של בדיקות ביצועים פנימיות של 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% |