בדיקות ביצועים של Hero הן קבוצה של בדיקות ביצועים שכוללות התהליך שעובר המשתמש ברמה גבוהה באפליקציה, כמו הפעלת האפליקציה או גלילה באפליקציית Pokedex בקוד פתוח.
- נקודות השוואה של Startup hero: מעקב אחרי הזמן שעובר מרגע פתיחת האפליקציה ועד שהתוכן מוצג.
- Scroll hero benchmarks: מדידת ביצועי הגלילה של רשת בטעינה מדורגת עם תמונות.
הגדרת הבדיקה
- בחירת האפליקציה: ביצענו את הבדיקות האלה באמצעות אפליקציית Pokedex בקוד פתוח, והשווינו בין הגרסאות שלה מבוססות-התצוגה ומבוססות-Compose. האפליקציה נבחרה כדי לייצג תרחישים בעולם האמיתי, והיא לא פותחה על ידי צוות Compose.
- הגדרת החומרה: בדיקות הביצועים בוצעו במכשיר Pixel 6 עם Android 17 (רמת API 37) עם מעבדים מרכזיים ומעבדים גרפיים נעולים. לפני גרסה 1.12 של Compose, בדיקות הביצועים נערכו ב-Pixel 3a. החל מגרסה 1.12 של Compose, מכשיר Pixel 6 משמש כערך הבסיס הסטנדרטי לביצועים של הערכות ביצועים עיקריות, וגם גרסה 1.11 של Compose נמדדה ב-Pixel 6 לצורך השוואה.
- הגדרת ה-build: בדיקות הביצועים משתמשות באפליקציה שנוצרה במצב הפצה כש-R8 מופעל. האפליקציה עוברת הידור מראש באופן מלא כדי לצמצם את חוסר היציבות שנובע מהידור JIT.
- בחירת התוצאות: כדי להבטיח ניתוח של התרחיש הגרוע ביותר, חריגים קיצוניים ורעש לא מייצג הוחרגו מתוצאות ההשוואה. לאחר מכן, נקבע ערך בסיס על ידי בחירת ערכי החציון של נתוני הביצועים בגבול העליון.
נקודות השוואה של גיבורי סטארט-אפ
כדי למדוד את ההפעלה, השתמשנו ב-PokedexStartupBenchmark. המדד PokedexStartupBenchmark מודד את משך הזמן שנדרש עד שהאפליקציה Pokedex מוצגת למשתמש.
הפעלת אפליקציה יכולה להתבצע באחד משלושה מצבים: הפעלה במצב קר (Cold start), הפעלה במצב ביניים (Warm start) או הפעלה במצב חם (Hot start). כל מצב משפיע על משך הזמן שחולף עד שהאפליקציה מוצגת למשתמש. בהפעלה במצב התחלתי (cold start), האפליקציה מופעלת מאפס. בבדיקה הזו אנחנו מודדים את ביצועי ההפעלה של האפליקציה במצב של הפעלה מההתחלה (cold start). מומלץ תמיד לבצע אופטימיזציה של האפליקציה בהנחה שהיא תופעל בהפעלה קרה. כך אפשר לשפר גם את הביצועים של הפעלות במצב ביניים (warm start) והפעלות במצב חם (hot start).
המדדים שבהם אנחנו משתמשים כדי למדוד את זמן ההפעלה של האפליקציה הם הזמן עד להצגה הראשונית והזמן עד להצגה המלאה.
הזמן עד להצגה הראשונית
המדד "זמן עד לתצוגה הראשונית" (TTID) מודד את הזמן שלוקח לאפליקציה להפיק את הפריים הראשון שלה, כולל אתחול התהליך במהלך הפעלה קרה, יצירת פעילות במהלך הפעלה קרה או חמה והצגת הפריים הראשון.
ב-PokedexStartupBenchmark, גרסה 1.13 של Compose מגיעה לתצוגה ראשונית תוך 147.65 אלפיות השנייה בהפעלה במצב התחלתי (cold start). התוצאה הזו היא בטווח הרעש הרגיל בין הרצות של Compose 1.12.1 (145.51 אלפיות השנייה) ו-Compose 1.11.4 (147.78 אלפיות השנייה), ומהירה ב-3.4% מ-Views (152.87 אלפיות השנייה).
| גרסה | הזמן עד להצגה הראשונית (באלפיות השנייה) |
|---|---|
| Compose 1.11 | 147.78 |
| Compose 1.12 | 145.51 |
| Compose 1.13 | 147.65 |
| צפיות | 152.87 |
זמן עד להצגה מלאה
המדד "זמן עד לתצוגה מלאה" (TTFD) מודד את הזמן עד שהאפליקציה הופכת לאינטראקטיבית. כלומר, כל הנתונים נטענו ומוצגים. מידע נוסף על הזמן עד לתצוגה מלאה זמין במאמר זמן ההפעלה של האפליקציה.
ב-PokedexStartupBenchmark, גרסה 1.13 של Compose מגיעה לתצוגה מלאה תוך 202.79 אלפיות השנייה בהפעלה במצב התחלתי (cold start). התוצאה הזו נמצאת בטווח הרעש הרגיל בין הרצות של Compose בגרסה 1.12.1 (201.96 אלפיות השנייה) ושל Compose בגרסה 1.11.4 (203.33 אלפיות השנייה). ב-Views, התצוגה המלאה מוצגת תוך 180.32 אלפיות השנייה, כך ש-Compose 1.13 איטי יותר ב-12.5% מ-Views ב-TTFD.
| גרסה | הזמן עד לתצוגה מלאה (באלפיות השנייה) |
|---|---|
| Compose 1.11 | 203.33 |
| Compose 1.12 | 201.96 |
| Compose 1.13 | 202.79 |
| צפיות | 180.32 |
נקודות השוואה של גלילה ב-Hero
כדי למדוד את ביצועי הגלילה, השתמשנו ב-PokedexScrollBenchmark. הוא מודד את ביצועי הגלילה של מסך האפליקציה Pokedex עבור רשת עם טעינה מדורגת (lazy grid) עם תמונות. בבדיקה הזו, כל המסך נגלל ומוסט כמה פעמים ופריטים חדשים נטענים. ביצועי הגלילה נמדדים לפי שיעור הקיטועים.
שיעור הדילוגים
מכשירי Android מעבדים עד 60 או 120 פריימים לשנייה (FPS). זה אומר שלמערכת יש מועד אחרון קפדני (לדוגמה, 16.6 אלפיות השנייה ל-60fps) ליצירת פריים. אם לאפליקציה לוקח יותר מדי זמן לבצע את העבודה שלה, זה יכול לגרום לבעיות בממשק (jank).
ב-PokedexScrollBenchmark, הביצועים של פיתוח נייטיב תואמים לביצועים של Views, עם 0 נקודות אחוז של עודף פריימים שנתקעו מאז גרסה 1.9.0 של פיתוח נייטיב. ב-Pixel 6, ב-Views וב-Compose יש 0.00% של קפיצות ב-Compose בגרסאות 1.11.4, 1.12.1 ו-1.13.
| גרסת Compose | מכשיר | חריגה בשיעור הפריימים הלא חלקים ביחס לצפיות (נקודות אחוז) |
|---|---|---|
| 1.3.3 | Pixel 3a | +0.35 |
| 1.4.3 | Pixel 3a | +0.41 |
| 1.5.4 | Pixel 3a | +0.42 |
| 1.6.8 | Pixel 3a | +0.21 |
| 1.7.8 | Pixel 3a | +0.36 |
| 1.8.0 | Pixel 3a | +0.38 |
| 1.9.0 | Pixel 3a | 0 |
| 1.10.0 | Pixel 3a | 0 |
| 1.11 | Pixel 6 | 0 |
| 1.12 | Pixel 6 | 0 |
| 1.13 | Pixel 6 | 0 |
הרצת הערכות ביצועים של גיבורים
כדי לאמת את תוצאות הביצועים ולהריץ את נקודות ההשוואה באופן מקומי:
- כדי לבדוק את קוד המקור, פועלים לפי המדריך של AndroidX.
- פועלים לפי ההוראות בקובץ README של קוד המקור של Hero Benchmarks כדי ליצור את חבילות ה-APK של נקודות ההשוואה והיעד (
pokedex-macrobenchmarkו-pokedex-macrobenchmark-target), מתקינים אותן במכשיר בדיקה ומריצים את החבילותPokedexStartupBenchmarkו-PokedexScrollBenchmarkבאמצעותadbאו Android Studio.
אתם יכולים להריץ את נקודות ההשוואה האלה בכל מכשיר נתמך, כמו מכשיר ספציפי שאתם מבצעים אופטימיזציה של האפליקציה בשבילו. עם זאת, כדי לאמת את התוצאות הרשמיות, צריך להשתמש באותה הגדרת חומרה.