שיפור הביצועים באמצעות סגנונות

עיצובים פועלים בשלב הפריסה והציור של פיתוח נייטיב. כך לא צריך ליצור משנים מבוססי-lambda, כי Styles תמיד מדלג על שלב ההרכבה.

שלבים בכתיבת הודעות ואיפה הסגנונות פועלים
איור 1. השלבים של התכונה 'יצירה' והמקום שבו הסגנונות פועלים.

השיפורים בביצועים בהשוואה לשימוש בהתאמות נובעים משלושה סוגים עיקריים של אופטימיזציות:

  • הזזת פאזה: סגנונות מכוונים בדרך כלל לשלב הציור. כשערך משתנה, Compose מבטל את התוקף רק של השלב המושפע (למשל, Redraw) במקום להפעיל Recomposition או Relayout מלאים.
  • הקצאה עצלה: סגנונות דוחים את הקצאת משאבי האנימציה עד שאנימציה מתחילה בפועל. כך מצטמצמת כמות העבודה שנדרשת במהלך ההרכבה הראשונית.
  • הפחתת התקורה של האובייקט: שינויים בשרשרת מקצים אובייקט לכל מאפיין (לדוגמה, ריווח פנימי, גבול). סגנונות משתמשים בפונקציית lambda אחת כדי להחיל כמה מאפיינים, וכך מצמצמים באופן משמעותי את הקצאות הזיכרון. אם סגנון (Style) מוגדר בערכת נושא, פונקציית ה-lambda הזו משותפת לכל הרכיבים שמשתמשים בנושא הזה.

בטבלה הבאה מוצגות תוצאות לדוגמה של מדדי ביצועים פנימיים של Styles ב-Compose 1.11.0-alpha06, בהשוואה להטמעה ב-Compose בלי Styles.

הבדיקה basic_box_border_change מדגישה את היתרון של מערכת הסגנונות במניעת הקצאה של אובייקטים מרובים של משנים במהלך עדכוני מאפיינים, וכתוצאה מכך חלה ירידה משמעותית של כ-77% בהקצאות, וירידה של כ-59% בזמן.

שיטת הבדיקה

תיאור

Time Change

שינוי הקצאה

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%