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

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

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

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

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

בטבלה הבאה מוצגות תוצאות לדוגמה של מדדי ביצועים פנימיים של 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%