איך הצוות של יומן Android שיפר את תהליך ההפעלה של האפליקציות ואת ממשק המשתמש באמצעות פרופילים של Baseline

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

הצוות של יומן Android הטמיע פרופילים בסיסיים וזוהה כ-20% מהאפליקציות בזמן ההפעלה לשפר את זמן ההפעלה וירידה של כ-50% בפריימים איטיים או קפואים. הנה מה הם עשו מקצה לקצה כדי להשיג את ההישגים האלה, ולכן החליטו להשתמש בפרופילים בסיסיים כדי למדוד את ההשפעה.

פרופילים ב-Cloud לעומת פרופילים בסיסיים

הצוות של יומן Android כבר השתמש ב-Cloud פרופילים, הן שיטה נוספת לאופטימיזציה של פרופיל העסק (PGO) שמבוססת על משתמשים בעולם האמיתי אינטראקציות עם האפליקציה. כך: פרופילים ב-Cloud ופרופילים בסיסיים השוואה:

סוג הפרופיל הגדרה כולל התהליכים שעוברים המשתמשים פועל בצורה הטובה ביותר כשבסיס המשתמשים הוא ההשפעה שמומשה גרסאות Android נתמכות

פרופילים ב-Cloud

מופעל כברירת מחדל

שנבחרת באופן אוטומטי על סמך נתוני משתמש בפועל

גדול

תוך כמה ימים

Android בגרסה 9 (רמת API 28) ואילך

פרופילים בסיסיים

הוגדר על ידך

שבחרת

כל הגדלים

מיידי

Android בגרסה 7 (רמת API 24) ואילך

אחת הסיבות העיקריות לכך שצוות יומן Android החליט להוסיף פרופילים של קבוצת הבסיס אל ה-codebase שלהם היה כי הם עברו למחזור גרסאות שבועי מהיר יותר. למרות שהפרופילים ב-Cloud מניבים שיפורים משמעותיים בביצועים, התהליך נמשך בין יום ליומיים. אחרי השקת האפליקציה, כדי שהם יגיעו להשפעה המקסימלית כי הם מסתמכים על צבירת נתוני משתמשים בפועל. תוספת לפרופילים ב-Cloud באמצעות ערך הבסיס פרופילים מאפשרים למשתמשים יותר זמן ליהנות משיפורים בביצועים לפני ההשקה של הגרסה הבאה של האפליקציה.

בנוסף, חשוב שצוות יומן Android יוכל לבחור אילו תהליכי משתמש קריטיים (CUJ) נכללים באופן ספציפי פרופיל. אפשר לעשות זאת באמצעות 'פרופילי הבסיס'.

באופן כללי, מומלץ להשתמש בפרופילים בסיסיים בנוסף לפרופילים ב-Cloud, מופעלת כברירת מחדל, כדי להשיג את תוצאות הביצועים הטובות ביותר.

כולל התהליכים שעוברים המשתמשים

הצוות של יומן Android בחר לכלול שני מפתחות CUJ בפרופיל הבסיס שלהם:

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

באופן כללי, כדאי להוסיף את ספקי ה-CUJ שהם רווחיים לעסק (אם הרלוונטיים) ו-CUJ הנפוצים ביותר. כדי לקבל מידע נוסף על אופן הבחירה CUJs לאופטימיזציה, ראו למה כוללים.

הטמעה

הצוות של יומן Android משתמש ב-wrapper פנימי עבור ספריית Jetpack Macrobenchmark ליצור פרופילים של בסיס להשוואה כדי שיהיה קל לשלב אותם עם כלים פנימיים מדרגיות כללית.

זו הגדרת הבדיקה של Macrobenchmark לפתיחת האפליקציה לפי לוח הזמנים תצוגה:

@Test
fun generateProfile() =
    baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
        startActivityAndWait()
        // Verify pre-existing recurring events and tasks are shown.
        device.waitAndFindObject(By.text("Recurring event"), 20_000)
        device.waitAndFindObject(By.text("Recurring task"), 20_000)

        // Open drawer and verify selected view.
        device.findObject(By.desc("Show Calendar List and Settings drawer")).click()
        device.waitAndFindObject(By.desc("Schedule view, Selected"), 1_000)
    }

מדידת ההשפעה באמצעות גרסאות מבוקרות

מאחר שהפרופילים הבסיסיים מחוברים היטב ל-APK שאיתם הם נשלחים ושולבו לפני שהאפליקציה מופעלת, לא ניתן להריץ בדיקת A/B רגילה להתנסות כדי להבין את ההשפעה שלהם. אבל הצוות של יומן Android יכולת לקבל מדידה מדויקת של ההשפעה באמצעות גרסאות מבוקרות, שבהן לפרסם את גרסת האפליקציה החדשה רק לקבוצת משנה של משתמשים, אותם למשתמשים בגרסה שדומה לגרסה הקודמת.

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

  • זמן האחזור החציוני של ההפעלה של האפליקציה האינטראקטיבית (התרחיש הנפוץ ביותר) ירד מ- 775 אלפיות השנייה עד 644 אלפיות שנייה (17%)
  • זמן האחזור החציוני של הפעלה במצב התחלתי (cold start) ירד מ-1,058 אלפיות השנייה ל-901 אלפיות השנייה (15%)
  • זמן האחזור החציוני להפעלה במצב ביניים (warm start) ירד מ-453 אלפיות השנייה ל-378 אלפיות השנייה (17%)
  • קצב הפריימים החציוני של הפריימים ירד ב-42-60% בצפיות בלוח הזמנים ובחודש

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

למידע נוסף על הכלים והתכונות, אפשר לעיין במקורות המידע הבאים: