Case Studies

‫Monzo משפרת את מדדי הביצועים בשיעור של עד 35% באמצעות עדכון פשוט של R8

משך קריאה: 2 דקות

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

הפעלת האופטימיזציות של R8 באופן מלא אפשרה לחברת Monzo להשיג ירידה משמעותית של 35% בשיעור מקרי ה-ANR (האפליקציה לא מגיבה). השינוי הפשוט הזה הוכיח שאופטימיזציות משמעותיות לא תמיד דורשות מאמצי תכנות מורכבים.

שיפורים משמעותיים בביצועים באמצעות המצב המלא של R8

ב-Monzo זיהו שמצב מלא של R8 הוא פתרון פשוט שכדאי לנסות, והוא עבד. הביצועים השתפרו בכל התחומים:

  • מהימנות ההפעלה: הפעלות במצב התחלתי (cold start) השתפרו ב-30%, הפעלות במצב ביניים (warm start) ב-24% והפעלות מתוך הזיכרון (hot start) ב-14%.
  • מהירות ההשקה: זמני ההשקה של P50 השתפרו ב-11% וזמני ההשקה של P90 השתפרו ב-12%.
  • יעילות: גודל האפליקציה הכולל קטן ב-9%.
  • יציבות: ירידה של 35% בשיעור מקרי ה-ANR.
AANDDM_Monzo_Quote-1.png
large_AANDDM_Monzo_Quote-2.png

הפעלת אופטימיזציות באמצעות שינוי אחד

הרבה אפליקציות ל-Android משתמשות בקובץ תצורה מיושן שמוגדר כברירת מחדל, שמשבית את רוב הפונקציות של כלי האופטימיזציה R8. השינוי העיקרי ש-Monzo ביצעה כדי לשפר את הביצועים היה החלפת קובץ ברירת המחדל proguard-android.txt בקובץ proguard-android-optimize.txt. השינוי הזה מסיר את ההוראה -dontoptimize ומאפשר ל-R8 לבצע את העבודה שלו כמו שצריך.

buildTypes {
  release {
    isMinifyEnabled = true
    isShrinkResources = true
    proguardFiles(
      getDefaultProguardFile("proguard-android-optimize.txt"),
    )
  }
}

אחרי שמבצעים את השינוי הזה, כדאי לבדוק את קובצי ההגדרה של Keep. הקבצים האלה מציינים ל-R8 אילו חלקים בקוד לא לשנות (בדרך כלל כי הם נקראים באופן דינמי או על ידי ספריות חיצוניות). ניקוי של כללי שמירה מיותרים מאפשר ל-R8 לבצע יותר פעולות.

שיפור הביצועים של הגלילה באמצעות פרופילים של Baseline

כדי לשפר עוד יותר את חוויית המשתמש, ב-Monzo הטמיעו פרופילים של Baseline, במטרה לשפר את הביצועים של הגלילה והעיבוד בפיד הראשי. האסטרטגיה הזו הבטיחה שהתהליכים הנפוצים ביותר שעוברים משתמשים – פתיחת האפליקציה וגלילה בפיד – יעברו אופטימיזציה מלאה. ההשפעה על הרינדור הייתה משמעותית: ביצועי הגלילה ב-P90 היו מהירים ב-71%, וביצועי הגלילה ב-P95 השתפרו ב-87%. עכשיו הגלילה באפליקציה חלקה יותר מבעבר.

חברת Monzo שילבה את השיפור הזה בתהליך ההפצה שלה כדי לשמור על השיפורים האלה לאורך זמן. "אנחנו מפעילים את יצירת פרופיל הבסיס בכל יום חול (לפני הפעלת הבנייה היומית שלנו) ומבצעים את השינויים האחרונים אחרי שהיא מסתיימת", מסביר נומאייר.

התעדכנות בפיתוח מודרני של אפליקציות ל-Android

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

מה העצה של נוימאייר לצוותים אחרים? בודקים באופן קבוע את השיטות שלכם בהשוואה לסטנדרטים הנוכחיים: "כדאי לעיין בהמלצות האחרונות של Google לגבי ביצועי האפליקציה ולבדוק אם אתם פועלים לפי כל העצות העדכניות".

כדי להתחיל ולהבין יותר על R8, אפשר לעבור לכתובת https://d.android.com/r8

נכתב על ידי:
להמשך קריאה