חברת ShareChat פותרת בעיות של תנודות כדי להגדיל את הגלילה בפיד ב-60%

מבוא

‫ShareChat היא פלטפורמת מדיה חברתית מובילה בהודו שמאפשרת למשתמשים לשתף את הדעות שלהם, לתעד את החיים שלהם ולהכיר חברים חדשים בשפת האם שלהם. תכונות נוספות כוללות חדרי צ'אט והודעות פרטיות, שמאפשרות למשתמשים לשתף סרטונים, בדיחות, שירים ותוכן חברתי אחר שמבוסס על שפה. החברה הוקמה במטרה להוביל את מהפכת האינטרנט בהודו, ומשנה את האופן שבו מיליארד המשתמשים הבאים יתקשרו באינטרנט.

האפליקציה במספרים

  • יותר מ-100 מיליון הורדות
  • יותר מ-180 מיליון משתמשים פעילים בחודש
  • יותר מ-32 מיליון יוצרי תוכן
  • 15 שפות הודיות שונות
  • כ-1.5 מיליון פוסטים נוצרים מדי יום

האתגר

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

כתוצאה מכך, באפליקציה נרשם מספר גבוה יותר של פריימים שהושמטו או שהוצגו באיחור (תופעה שנקראת גם 'גמגום'). כדי לספק חוויה חלקה לכל המשתמשים, היה חשוב לתקן את בעיות הגמגום האלה על ידי שיפור פריימים איטיים וקפואים. השינוי הזה גם יעזור למשתמשים לבלות יותר זמן באפליקציה, יגביר את רמת המעורבות שלהם ובסופו של דבר ישפר את הדירוג של ShareChat בחנות Google Play ל-Android.

איך הם עשו את זה

צוות ShareChat עבד עם צוות יחסי המפתחים של Google כדי לצמצם את הבעיה של תמונות קפואות או תמונות שמוצגות באיחור (Jank) באפליקציה, וכך לשפר את הביצועים העסקיים. באופן ספציפי, הם עבדו על שיפור הבעיות הבאות:

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

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

  • OverDraw – פריסות פשוטות יותר כדי לצמצם את השכבות ולהסיר צבעים שהוגדרו בנפרד לכל אחת מהשכבות.

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

  • ניפוח מוגזם של נתוני הצפיות – זוהה זמן ניפוח ארוך לצפיות מסוימות במהלך יצירת הפרופיל. הצפיות האלה הומרו ל-viewstubs.

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

  • מעבר מ-Rx אל Coroutine – צריכת הזיכרון הובילה גם לקריאות תכופות ל-GC, והיו מספרים גבוהים מאוד של שרשורים דרך השרשור >100 RX. כדי לפתור את הבעיות האלה, העברנו הרבה תרחישי שימוש ל-Coroutine.

  • הטמעה של Coil לטעינת תמונות – Glide גרמה לבעיות בטעינת תמונות, במיוחד ברכיבים שנבנו באמצעות Jetpack Compose. זוהתה גם בעיה שבה סרגל הסף של הרינדור היה גבוה מדי בזמן טעינת תמונות ב-LazyColumn. המקרים האלה הובילו להטמעה של Coil לטעינת תמונות.

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

תוצאות

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

  • ירידה של כ-45% במספר הפריימים 'הרינדור שלהם איטי' בחנות Play
  • ירידה של כ-30% במספר הפריימים 'הקפואים' בחנות Play
  • שיעור הפריימים המגומגמים מתוך כל 10,000 פריימים שעברו רינדור ירד מ-10.72% ל-3.98%
  • השימוש בפיד עלה ב-60%
  • הדירוגים הכוללים בחנות עלו מ-4.0 בערך ל-4.3
  • עלייה של 10% בצריכת הפוסטים

"המטרה שלנו ב-ShareChat היא להיות אפליקציית המדיה החברתית הטובה ביותר שמשמחת את המשתמשים שלנו.זה אומר גם להיות הטובים ביותר מבחינת ביצועי האפליקציה. העבודה המשותפת שלנו עם צוות קשרי המפתחים של Google עזרה לנו לזהות תחומים לשיפור במכשירים הכי נפוצים של משתמשי קצה ברמה נמוכה. למדנו את השיטות המומלצות לשיפור הביצועים ואת הכלים לזיהוי ולתיקון של פריימים קפואים, תקלות, ציור יתר ו-ANR".

– ויאהן ורמה (Vihaan Verma), מנהל הנדסה, צוות Android ב-ShareChat