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

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

שלבים בכתיבה באמצעות Compose והמקומות שבהם 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%