נקודות השוואה של גיבורים

המדדים המרכזיים הם קבוצה של מדדים שכוללים תהליכי משתמש ברמה גבוהה באפליקציה, כמו הפעלת האפליקציה או גלילה באפליקציית Pokedex בקוד פתוח.

  • מדדי ביצועים של אפליקציות שמופעלות במהירות: מעקב אחר הזמן שחלף מפתיחת האפליקציה ועד להצגת התוכן.
  • מדדי השוואה של רכיב Hero שניתן לגלילה: מדידת ביצועי הגלילה של רשת עצלה עם תמונות.

הגדרת הבדיקה

  • בחירת האפליקציה: ערכנו את הבדיקות האלה באמצעות אפליקציית Pokedex בקוד פתוח, והשווינו בין הגרסאות שלה שמבוססות על תצוגה ועל יצירה. האפליקציה נבחרה כדי לייצג תרחישים בעולם האמיתי, והיא לא פותחה על ידי צוות Compose.
  • הגדרת החומרה: ערכנו בדיקות ביצועים במכשיר Pixel 3a עם Android 12 (API 31) עם מעבדי CPU ו-GPU נעולים. המכשיר הזה משמש כנקודת השוואה סטנדרטית לביצועים של מכשירים מובילים.
  • הגדרת ה-Build: המדדים מבוססים על האפליקציה שנוצרה במצב הפצה עם R8 מופעל. האפליקציה עוברת הידור מלא מראש כדי לצמצם את חוסר היציבות שנובע מהידור just-in-time ‏ (JIT).
  • בחירת התוצאות: כדי להבטיח ניתוח של המקרה הגרוע ביותר, חריגים קיצוניים ורעשים לא מייצגים הוחרגו מתוצאות ההשוואה. לאחר מכן נקבע קו בסיס על ידי בחירת ערכי החציון של נתוני הביצועים של הגבול העליון

בדיקות השוואה של סטארט-אפים

כדי למדוד את ההפעלה, השתמשנו ב-PokedexStartupBenchmark. המדד PokedexStartupBenchmark מודד את הזמן שנדרש עד שאפליקציית Pokedex תהיה גלויה למשתמש.

הפעלת האפליקציה יכולה להתבצע באחד משלושה מצבים: הפעלה מחדש (Cold start), הפעלה מתוך הזיכרון (Warm start) או הפעלה מתוך הזיכרון (Hot start). כל סטטוס משפיע על משך הזמן שנדרש עד שהאפליקציה תהיה גלויה למשתמש. בהפעלה במצב התחלתי (cold start), האפליקציה מתחילה מאפס. במדד ההשוואה הזה אנחנו מודדים את ביצועי ההפעלה של האפליקציה במצב של הפעלה מההתחלה (cold startup). מומלץ לבצע אופטימיזציה של האפליקציה תמיד על סמך ההנחה של הפעלה במצב התחלתי (cold start). הפעולה הזו יכולה לשפר גם את הביצועים של הפעלות במצב ביניים (warm start) והפעלות במצב חם (hot start).

המדדים שבהם אנחנו משתמשים כדי למדוד את זמן ההפעלה של האפליקציה הם הזמן עד להצגה הראשונית והזמן עד להצגה מלאה.

PokedexStartupBenchmark

הזמן עד להצגה הראשונית

המדד 'זמן עד להצגה ראשונית' (TTID) מודד את הזמן שנדרש לאפליקציה כדי ליצור את הפריימים הראשונים שלה, כולל אתחול התהליך במהלך הפעלה במצב התחלתי (cold start), יצירת הפעילות במהלך הפעלה במצב התחלתי (cold start) או הפעלה במצב ביניים (Warm start) והצגת הפריימים הראשונים.

ב-PokedexStartupBenchmark, ‏ Compose 1.11 איטי ב-2.5% מ-Views מבחינת TTID עם הפעלה מההתחלה (cold start).

‫Compose 1.11 איטי ב-2.5% מ-Views מבחינת TTID
איור 1: פיתוח נייטיב גרסה 1.11 בהשוואה ל-Views ל-TTID.

הזמן עד להצגה מלאה

הזמן עד להצגה מלאה (TTFD) הוא משך הזמן שחולף עד שהאפליקציה מאפשרת אינטראקציה. המשמעות היא שכל הנתונים נטענו ומוצגים. מידע נוסף על הזמן עד להצגה מלאה זמין במאמר זמן ההפעלה של האפליקציה.

ב-PokedexStartupBenchmark, ‏ Compose 1.11 איטי ב-13.0% מ-Views מבחינת TTFD בהפעלה במצב התחלתי (cold start).

המהירות של Compose 1.11 נמוכה ב-13.0% מזו של Views מבחינת TTFD
איור 2: השוואה בין גרסה 1.11 של Compose לבין Views מבחינת TTFD.

גלילה של בדיקות השוואה של גיבורים

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

שיעור ה-Jank

מכשירי Android מבצעים רינדור בקצב של עד 60 או 120 פריימים לשנייה (fps). המשמעות היא שלמערכת יש דדליין מחמיר (לדוגמה, 16.6 אלפיות השנייה ל-60 פריימים לשנייה) ליצירת פריימים. אם האפליקציה מבצעת את הפעולות שלה לאט מדי, יכול להיות שיופיעו גמגומים שנקראים jank.

ב-PokedexScrollBenchmark, הביצועים של Compose ו-Views זהים, עם שיעור של 0.21% של בעיות בממשק (jank) מאז Compose 1.9.0. במונחים מוחלטים, פרים אחד מתוך 485 היה לא יציב.

המדדים האלה מראים שגרסה Compose 1.9 ואילך תואמת לביצועים של Views מבחינת jank בזמן גלילה.

מאז Compose 1.9.0, ל-Compose ול-Views יש אותו שיעור של jank
מאז Compose 1.9.0, ל-Compose ול-Views יש אותו שיעור jank.

הפעלת בדיקות השוואה של גיבורים

כדי לאמת את תוצאות הביצועים ולהריץ את ההשוואות לשוק המקומי:

  1. כדי לבדוק את קוד המקור, פועלים לפי המדריך ל-AndroidX.
  2. פועלים לפי ההוראות בקוד המקור של Hero Benchmarks.

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