עיצובים פועלים בשלב הפריסה והציור של פיתוח נייטיב. כך לא צריך ליצור משנים מבוססי-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% |