פרופילים של Baseline משפרים את מהירות הרצת הקוד ב-30% בערך, כי הם מאפשרים להימנע משלבי פרשנות וקימפול just-in-time (JIT) לתהליכים נפוצים שעוברים משתמשים. פרופילים של Baseline מאפשרים לכם לבחור את תהליכי המשתמש שאתם רוצים לבצע אופטימיזציה שלהם, ויכולים לעזור לכם לשפר את ההפעלה של האפליקציה, לצמצם בעיות בממשק (jank) ועוד. בתמורה, תוכלו לשפר מדדים עסקיים כמו שימור משתמשים ודירוגים. מידע נוסף על פרופילים של הגדרות בסיסיות
צוות Android Calendar הטמיע פרופילים של Baseline וראה שיפור של כ-20% בזמן ההפעלה של האפליקציה וצמצום של כ-50% בפריימים איטיים או קפואים. כאן מוסבר מה הם עשו מקצה לקצה כדי לשפר את הביצועים, החל מהסיבות שבגללן הם החליטו להשתמש בפרופילים של Baseline ועד לאופן שבו הם מדדו את ההשפעה.
פרופילים של Cloud לעומת פרופילים של Baseline
צוות Android Calendar כבר השתמש בפרופילים ב-Cloud, שהם שיטה נוספת לאופטימיזציה מבוססת-פרופיל (PGO) שמבוססת על אינטראקציות של משתמשים עם האפליקציה בעולם האמיתי. הנה השוואה בין פרופילים ב-Cloud לבין פרופילים Baseline:
| סוג הפרופיל | הגדרה | התהליכים שעוברים המשתמשים כלולים | השיטה הזו מתאימה במיוחד אם בסיס המשתמשים | ההשפעה שהושגה | גרסאות Android נתמכות |
|---|---|---|---|---|---|
פרופילים של Cloud |
מופעל כברירת מחדל |
נבחר באופן אוטומטי על סמך נתוני משתמשים בפועל |
גדול |
תוך כמה ימים |
Android מגרסה 9 (API ברמה 28) ואילך |
פרופילים של Baseline |
הוגדר על ידך |
נבחר על ידך |
כל הגדלים |
מיידי |
Android מגרסה 7 (API ברמה 24) ואילך |
אחת הסיבות העיקריות לכך שצוות Android Calendar החליט להוסיף פרופילים בסיסיים לבסיס הקוד שלו הייתה המעבר למחזור הפצה מהיר יותר, שבועי. פרופילים של Cloud משפרים משמעותית את הביצועים, אבל לוקח יום או יומיים אחרי הפעלת האפליקציה עד שההשפעה שלהם מגיעה לשיא, כי הם מסתמכים על צבירה של נתוני משתמשים מהעולם האמיתי. הוספה של פרופילים של Baseline לפרופילים של Cloud מאפשרת למשתמשים ליהנות משיפורים בביצועים לפני השקת הגרסה הבאה של האפליקציה.
בנוסף, היה חשוב לצוות של יומן Google ל-Android לבחור אילו תהליכים קריטיים של משתמשים (CUJ) ייכללו בפרופיל, ואפשר לעשות זאת באמצעות פרופילים של Baseline.
באופן כללי, מומלץ להשתמש בפרופילים של Baseline בנוסף לפרופילים של Cloud, שמופעלים כברירת מחדל, כדי להשיג את התוצאות הטובות ביותר מבחינת ביצועים.
התהליכים שעוברים המשתמשים כלולים
צוות יומן Android בחר לכלול שני תרחישי שימוש מרכזיים בפרופילים של קו הבסיס:
- פתיחת האפליקציה בתצוגת לוח הזמנים: זו התצוגה שמוגדרת כברירת מחדל, ולכן חשוב לבצע אופטימיזציה למשתמשים שמשתמשים באפליקציה בפעם הראשונה או שלא משנים את הגדרות ברירת המחדל.
- פתיחת האפליקציה בתצוגה חודשית: התצוגה הזו נבחרה על ידי משתמשים רבים, על סמך נתוני המשתמשים. כדי לעקוב אחרי אופן השימוש של המשתמשים באפליקציה, אפשר להשתמש בכלים כמו Firebase.
באופן כללי, כדאי להוסיף את תרחישי השימוש המרכזיים שמניבים רווח לעסק (אם רלוונטי) ואת תרחישי השימוש המרכזיים הנפוצים ביותר. מידע נוסף על בחירת תרחישי שימוש מרכזיים לאופטימיזציה
הטמעה
צוות לוח השנה של Android משתמש בעטיפה פנימית של ספריית Jetpack Macrobenchmark כדי ליצור פרופילי Baseline, במטרה לשלב אותם בקלות עם כלים פנימיים ולשפר את יכולת ההתאמה שלהם.
הנה הגדרת הבדיקה של Macrobenchmark לפתיחת האפליקציה בתצוגת לוח זמנים:
@Test
fun generateProfile() =
baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
uiAutomator {
startApp(packageName = PACKAGE_NAME)
// Verify pre-existing recurring events and tasks are shown.
// onElement waits for the element by default
onElement { textAsString() == "Recurring event" }
onElement { textAsString() == "Recurring task" }
// Open drawer and verify selected view.
onElement { contentDescriptionAsString() == "Show Calendar List and Settings drawer" }.click()
onElement { contentDescriptionAsString() == "Schedule view, Selected" }
}
}
מחליפים את מה שכתוב בשדות הבאים:
- PACKAGE_NAME: שם החבילה של האפליקציה שעבורה רוצים ליצור פרופילים של Baseline.
מדידת ההשפעה באמצעות השקות גרסה מבוקרות
פרופילי הבסיס משולבים בחבילת ה-APK שאיתה הם נשלחים, והם מופעלים לפני שהאפליקציה רצה. לכן אי אפשר להריץ ניסוי A/B רגיל כדי להבין את ההשפעה שלהם. עם זאת, צוות Android Calendar הצליח לקבל מדד מדויק של ההשפעה באמצעות הפצות מבוקרות, שבהן אתם בעצם מפיצים את הגרסה החדשה של האפליקציה רק לקבוצת משנה של משתמשים ומשווים אותם למשתמשים שמשתמשים בגרסה שדומה לגרסה הקודמת.
בעזרת פרופילים של קו בסיס, הם נהנו מהשיפורים המשמעותיים הבאים בתחומים שונים. הנתונים הסטטיסטיים האלה מצטברים במגוון רחב של מכשירים ושל משתמשים – סביר להניח שהמשתמשים שמתחילים בתצוגת לוח הזמנים ובתצוגה החודשית ייהנו מהיתרונות הכי גדולים, אבל גם משתמשים אחרים ייהנו מהם כי התהליכים המשותפים, כמו טעינת נתוני לוח השנה ממסד הנתונים, עוברים אופטימיזציה.
- זמן האחזור החציוני של הפעלת אפליקציה אינטראקטיבית (התרחיש הנפוץ ביותר) ירד מ-775ms ל-644ms (17%)
- זמן האחזור החציוני של הפעלה במצב התחלתי (cold start) ירד מ-1,058ms ל-901ms (15%)
- חציון זמן ההפעלה במצב ביניים ירד מ-453 אלפיות השנייה ל-378 אלפיות השנייה (17%)
- קצב הפריימים החציוני עם תנודות פתאומיות ירד ב-42-60% בתצוגות של לוח הזמנים והחודש
חשוב לזכור שאם משתמשים בפרופילים ב-Cloud בשילוב עם פרופילים של Baseline, סביר להניח שהשיפורים יפחתו מעט במהלך השבוע הראשון, כי פרופילים ב-Cloud נוצרים. עם זאת, עדיין כדאי להשתמש בפרופילים של Baseline כדי לשפר את הביצועים באופן משמעותי בנוסף לאופטימיזציות אחרות שאתם מבצעים.
מידע נוסף על הכלים והתכונות זמין במקורות המידע הבאים: