מקרים לדוגמה
הפעלת סרטונים מיידית ושיפור ההתעניינות של המשתמשים ב-Instagram וב-Facebook באמצעות Media3 PreloadManager
משך הקריאה: 4 דקות
בעולם הדינמי של הרשתות החברתיות, תשומת הלב של המשתמשים נמשכת או נעלמת במהירות. האפליקציות של Meta (פייסבוק ואינסטגרם) הן בין הפלטפורמות החברתיות הגדולות בעולם, והן משרתות מיליארדי משתמשים ברחבי העולם. עבור Meta, הצגת סרטונים בצורה חלקה היא לא רק תכונה, אלא ליבת חוויית המשתמש. סרטונים קצרים, במיוחד בפיד החדשות של פייסבוק וב-Reels באינסטגרם, הפכו לגורם מרכזי להגברת האינטראקציה. הם מאפשרים ביטוי יצירתי וצריכת תוכן מהירה, ומחברים בין אנשים בכל העולם ומספקים להם בידור.
בפוסט הזה בבלוג נסביר איך Meta שינתה את הפעלת הסרטונים עבור מיליארדים של משתמשים על ידי הפעלת סרטונים מיידית.
הפער בזמן האחזור בסרטונים קצרים
סרטונים קצרים מובילים לאינטראקציות מהירות מאוד, כי המשתמשים גוללים במהירות בפידים שלהם. הצגת מעבר חלק בין סרטונים בפיד שמשתנה כל הזמן יוצרת אתגרים ייחודיים בהפעלה מיידית. לכן אנחנו צריכים פתרונות שהם מעבר לשיטות המסורתיות של שמירת נתונים במטמון בדיסק ולאסטרטגיות סטנדרטיות של הפעלה תגובתית.
המסלול לעבר העתיד עם Media3 PreloadManager
כדי לתת מענה לשינויים בהרגלי הצריכה בעקבות העלייה בצריכת תוכן קצר, ולמגבלות של ארכיטקטורת הפעלה מסורתית של תוכן ארוך, הוספנו ל-Jetpack Media3 את PreloadManager. הרכיב הזה מאפשר למפתחים להשתמש בשיטות אחרות מלבד שמירת נתונים במטמון בדיסק, ומציע שליטה מפורטת והתאמה אישית כדי לשמור את המדיה בזיכרון לפני שהמשתמש מפעיל אותה. בסדרת הפוסטים הזו בבלוג מוסברות פרטים טכניים על הפעלת מדיה באמצעות PreloadManager.
איך Meta השיגה הפעלה מיידית אמיתית
מורכבויות קיימות
בעבר, מטא השתמשה בשילוב של חימום (כדי להכין את הנגנים) ושליפה מראש (prefetch) (כדי לשמור תוכן במטמון בדיסק) להצגת סרטונים. השיטות האלה עזרו לשפר את היעילות של הרשת, אבל הן יצרו אתגרים משמעותיים. כדי להפעיל את התכונה 'חימום' היה צריך ליצור כמה מופעים של נגן ברצף, מה שצרך כמות גדולה של זיכרון והגביל את הטעינה מראש לכמה סרטונים בלבד. הביקוש הגבוה למשאבים האלה הוביל אותנו להשתמש בפתרון חזק יותר שניתן להרחבה, כדי לספק את ההפעלה המיידית שמשתמשים מצפים לה בפידים מודרניים של רשתות חברתיות שניתן לגלול בהם במהירות.
שילוב של Media3 PreloadManager
כדי להשיג הפעלה מיידית באמת, צוות Media Foundation Client של מטא שילב את Jetpack Media3 PreloadManager בפייסבוק ובאינסטגרם. הם בחרו ב-DefaultPreloadManager כדי לאחד את מערכות הטעינה מראש וההפעלה שלהם. השילוב הזה דרש שינוי מבנה (refactoring) של הארכיטקטורה הקיימת של Meta כדי לאפשר שיתוף יעיל של משאבים בין המופעים של PreloadManager ו-ExoPlayer. השינוי האסטרטגי הזה סיפק יתרון ארכיטקטוני מרכזי: היכולת להריץ במקביל משימות של טעינה מראש ולנהל סרטונים רבים באמצעות מופע נגן יחיד. השיטה הזו הגדילה באופן משמעותי את קיבולת הטעינה מראש, וביטלה את המורכבויות הגבוהות של הזיכרון שהיו בשיטה הקודמת.
אופטימיזציה וכוונון ביצועים
לאחר מכן, הצוות ביצע בדיקות נרחבות ושיפורים חוזרים כדי לבצע אופטימיזציה של הביצועים במערכת האקולוגית המגוונת של מכשירים גלובליים של Meta. טעינה מראש אגרסיבית מדי בהתחלה גרמה לפעמים לבעיות, כולל שימוש מוגבר בזיכרון והאטה בביצועים של הגלילה. כדי לפתור את הבעיה, הם ביצעו כוונון עדין של ההטמעה באמצעות מדידות מדויקות של הזיכרון, תוך התחשבות בפיצול המכשירים והתאמת המערכת לדפוסי ממשק משתמש ספציפיים.
התאמה מדויקת של ההטמעה לדפוסי ממשק משתמש ספציפיים
Meta יישמה אסטרטגיות שונות של טעינה מראש והתאימה את ההתנהגות כך שתתאים לדפוסי ממשק המשתמש הספציפיים של כל אפליקציה:
- פיד החדשות של פייסבוק: ממשק המשתמש נותן עדיפות לסרטון שמוצג כרגע. הכלי לניהול טגים טוען מראש רק את הסרטון הנוכחי כדי לוודא שהוא יתחיל ברגע שהמשתמש ישהה את הגלילה. ההתמקדות בנתונים נוכחיים בלבד מצמצמת את כמות הנתונים ואת השימוש בזיכרון בסביבה שבה המשתמשים עשויים לראות פוסטים סטטיים רבים בין סרטונים. למרות שהמערכת מתוכננת כרגע לטעינה מראש רק של הסרטון שמוצג, אפשר לשנות את ההגדרה כך שהיא תטען מראש גם סרטונים עתידיים.
- סרטוני Reels באינסטגרם: סביבה של סרטונים בלבד שבה המשתמשים מחליקים אנכית. בממשק המשתמש הזה, הצוות הטמיע אסטרטגיה של טעינה מראש של נכסים סמוכים. ה-PreloadManager שומר את הסרטונים בזיכרון מיד אחרי סרטון ה-Reel הנוכחי. הגישה הדו-כיוונית הזו מבטיחה שהמעבר יהיה מיידי וחלק, בין אם המשתמש יחליק למעלה או למטה. התוצאה הייתה שיפור משמעותי באיכות החוויה (QoE), כולל שיפורים בהתחלת ההפעלה ובזמן עד להצגת הפריים הראשון למשתמש.
התאמה לסביבה עסקית גלובלית מגוונת של מכשירים
כדי להרחיב את השימוש בחבילת טכנולוגיות וידאו עם ביצועים גבוהים במיליארדי מכשירים, צריך יותר מטעינה מראש אגרסיבית – צריך אינטליגנציה. חברת Meta נתקלה באתגרים ראשוניים שקשורים ללחץ על הזיכרון ולפיגור בגלילה, במיוחד בחומרה ברמת הביניים עד הרמה הנמוכה. כדי לפתור את הבעיה, הם בנו מערכת לזיהוי עומס על המכשיר סביב ההטמעה של Media3. האפליקציות עכשיו עוקבות אחרי אותות קלט/פלט ומעבד בזמן אמת. אם המכשיר נמצא בעומס כבד, הטעינה מראש מושהית כדי לתת עדיפות לרספונסיביות של ממשק המשתמש.
האופטימיזציה הזו מודעת למכשיר, ולכן היא מבטיחה שהיתרון של הפעלה מיידית לא יבוא על חשבון יציבות המערכת. כך גם משתמשים עם חומרה ישנה יותר יוכלו ליהנות מפיד חלק ורציף.
שיפורים בארכיטקטורה ובקוד
בנוסף למדדים שגלויים למשתמשים, המעבר ל-Media3 PreloadManager הניב יתרונות ארכיטקטוניים לטווח הארוך. תהליך השילוב והכוונון דרש כמה איטרציות כדי לאזן את הביצועים, אבל בסיס הקוד שנוצר קל יותר לתחזוקה. הצוות גילה ש-API PreloadManager משתלב בצורה חלקה עם המערכת האקולוגית הקיימת של Media3, ומאפשר שיתוף טוב יותר של משאבים. עבור Meta, ההטמעה של Media3 PreloadManager הייתה השקעה אסטרטגית בעתיד של צריכת הווידאו.
הם הטמיעו טעינה מראש והוסיפו שערים חכמים למכשירים, וכך הצליחו להגדיל את סך זמן הצפייה באפליקציות שלהם ולשפר את רמת המעורבות הכוללת של הקהילה הגלובלית שלהם.
ההשפעה על אינסטגרם ופייסבוק
הארכיטקטורה הפרואקטיבית הביאה לשיפורים מיידיים ומדידים בשתי הפלטפורמות.
- בפייסבוק נהנו מהפעלה מהירה יותר, ירידה בשיעורי ההשהיה של ההפעלה וצמצום מספר הסשנים הבעייתיים (כמו טעינה מחדש, זמן התחלה מושהה, איכות נמוכה וכו'), ובסך הכול חל גידול בזמן הצפייה.
- ב-Instagram נרשמו התחלות הפעלה מהירות יותר ועלייה בזמן הצפייה הכולל. הסרת זמן האחזור של ההצטרפות (הפרק הזמן מפעולת המשתמש ועד להצגת הפריים הראשון) הגדילה באופן ישיר את מדדי ההתעניינות. המשמעות של פחות הפרעות בגלל צמצום החיץ הייתה שהמשתמשים צפו ביותר תוכן, וזה בא לידי ביטוי במדדי המעורבות.
תובנות הנדסיות חשובות בקנה מידה גדול
ככל שהרגלי צריכת המדיה משתנים, הביקוש לחוויית שימוש מיידית ימשיך לגדול. הטמעה של ניהול זיכרון פרואקטיבי ואופטימיזציה של האפליקציה כדי שתתאים למגוון רחב של מכשירים ולשימוש בהיקף גדול מבטיחים שהאפליקציה תעמוד בציפיות האלה בצורה יעילה.
- הגדרת עדיפות לטעינה מראש חכמה
כדי לספק חוויה אמינה, מומלץ למזער את הגימגומים ואת זמני הטעינה באמצעות טעינה מראש. במקום להשתמש במטמון פשוט בדיסק, טעינה מראש ברמת הזיכרון מבטיחה שהתוכן יהיה מוכן ברגע שהמשתמש יקיים איתו אינטראקציה.
- התאמת ההטמעה לדפוסי ממשק משתמש
אפשר להתאים אישית את אופן הפעולה של הטעינה מראש בהתאם לממשק המשתמש של האפליקציות. לדוגמה, אפשר להשתמש במיקוד 'נוכחי בלבד' לפידים מעורבים כמו פייסבוק כדי לחסוך בזיכרון, ובאסטרטגיית 'טעינה מראש של מודעות סמוכות' בסביבות אנכיות כמו סרטוני Reels באינסטגרם.
- שימוש ב-Media3 כדי לשמור על תקינות הקוד לטווח הארוך
שילוב עם ממשקי API של Media3 במקום עם פתרון מותאם אישית של שמירת נתונים במטמון מאפשר שיתוף טוב יותר של משאבים בין הנגן לבין PreloadManager, וכך אפשר לנהל כמה סרטונים באמצעות מופע נגן יחיד. התוצאה היא בסיס קוד עמיד לעתיד, שצוותי הנדסה יכולים בקלות לתחזק ולבצע בו אופטימיזציה לאורך זמן, וגם ליהנות מעדכוני התכונות האחרונים.
- הטמעה של אופטימיזציות שמותאמות למכשיר
כדי להרחיב את טווח ההגעה לשוק, כדאי לבצע בדיקות במכשירים שונים, כולל דגמים בינוניים ודגמים ברמת כניסה. שימוש באותות בזמן אמת כמו מעבד (CPU), זיכרון וקלט/פלט (I/O) כדי להתאים באופן דינמי את התכונות ואת השימוש במשאבים.
למידע נוסף
כדי להתחיל ולקבל מידע נוסף, אפשר להיכנס אל
- מאמרי העזרה בנושא PreloadManager ב-Media3
- אפשר לקרוא את סדרת הפוסטים בבלוג לפרטים טכניים מתקדמים ולמידע על הטמעה.
- כדי לראות את הטעינה מראש בפעולה, אפשר לעיין באפליקציית הדוגמה.
עכשיו אתם יודעים את הסודות להפעלה מיידית. כדאי לנסות אותם!
להמשך הקריאה
-
מקרים לדוגמה
Monzo הוא בנק דיגיטלי בבריטניה עם 15 מיליון לקוחות, והמספרים ממשיכים לגדול. כשהאפליקציה גדלה, צוות ההנדסה זיהה את זמן ההפעלה של האפליקציה כנקודה קריטית לשיפור, אבל חשש שיידרשו שינויים משמעותיים בבסיס הקוד.
Ben Weiss • משך הקריאה: 2 דקות
-
מקרים לדוגמה
טיקטוק היא פלטפורמה גלובלית של סרטונים קצרים, שידועה בבסיס המשתמשים העצום שלה ובתכונות החדשניות שלה.
Ben Trengrove, Ajesh Pai • משך הקריאה: 2 דקות
-
מקרים לדוגמה
כשמפתחים אפליקציית Android למכשיר לביש, העבודה האמיתית מתחילה כשהמסך כבוי.
Breana Tate • משך הקריאה: 4 דקות
כדאי תמיד להיות בעניינים
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?