Case Studies

הפעלת סרטונים מיידית ושיפור ההתעניינות של המשתמשים ב-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. השינוי האסטרטגי הזה סיפק יתרון ארכיטקטוני חשוב: היכולת להריץ במקביל משימות של טעינה מראש ולנהל סרטונים רבים באמצעות מופע נגן יחיד. השיטה הזו הגדילה באופן משמעותי את קיבולת הטעינה מראש, וביטלה את המורכבויות הגבוהות של הזיכרון שהיו בשיטה הקודמת.

colinKho.png

אופטימיזציה וכוונון ביצועים

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

התאמה עדינה של ההטמעה לדפוסי ממשק משתמש ספציפיים

מטא יישמה אסטרטגיות שונות של טעינה מראש, והתאימה את ההתנהגות שלה לדפוסי ממשק המשתמש הספציפיים של כל אפליקציה:

  • פיד החדשות של פייסבוק: ממשק המשתמש נותן עדיפות לסרטון שמוצג כרגע. הכלי לניהול טעינה מראש טוען מראש רק את הסרטון הנוכחי כדי לוודא שהוא יתחיל ברגע שהמשתמש ישהה את הגלילה. ההתמקדות בנתונים עדכניים בלבד מצמצמת את כמות הנתונים ואת השימוש בזיכרון בסביבה שבה המשתמשים עשויים לראות פוסטים סטטיים רבים בין סרטונים. למרות שהמערכת מתוכננת כרגע לטעינה מראש רק של הסרטון שמוצג, אפשר לשנות את ההגדרה כך שהיא תטען מראש גם סרטונים עתידיים. 
  • סרטוני Reels באינסטגרם: סביבה שכוללת רק סרטונים, שבה המשתמשים מחליקים אנכית. בממשק המשתמש הזה, הצוות הטמיע אסטרטגיה של טעינה מראש של נתונים סמוכים. ה-PreloadManager שומר את הסרטונים מיד אחרי ה-Reel הנוכחי בזיכרון. הגישה הדו-כיוונית הזו מבטיחה שהמעבר יהיה מיידי וחלק, בין אם המשתמש מחליק למעלה או למטה. התוצאה הייתה שיפור משמעותי באיכות החוויה (QoE), כולל שיפורים בהתחלת ההפעלה ובזמן עד להצגת הפריים הראשון למשתמש.

התאמה לשימוש בסביבה עסקית גלובלית מגוונת של מכשירים

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

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

mirabelHu.png

שיפורים בארכיטקטורה ובקוד

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

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

ההשפעה על אינסטגרם ופייסבוק

הארכיטקטורה הפרואקטיבית הביאה לשיפורים מיידיים ומדידים בשתי הפלטפורמות. 

  • בפייסבוק נהנו מהפעלה מהירה יותר, ירידה בשיעורי ההשהיה של ההפעלה וצמצום של סשנים בעייתיים (כמו טעינה מחדש, זמן התחלה מושהה, איכות נמוכה וכו'), ובסך הכול חל גידול בזמן הצפייה. 
  • ב-Instagram נרשמו התחלות הפעלה מהירות יותר ועלייה בזמן הצפייה הכולל. הסרת זמן האחזור של ההצטרפות (הפרק הזמן מפעולת המשתמש ועד להצגת הפריים הראשון) הגדילה באופן ישיר את מדדי ההתעניינות. המשמעות של פחות הפרעות בגלל צמצום הבאפרינג הייתה שהמשתמשים צפו ביותר תוכן, וזה בא לידי ביטוי במדדי המעורבות.
beforeAfterPreload.gif

תובנות הנדסיות חשובות בקנה מידה גדול

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

  • הגדרת עדיפות לטעינה מראש חכמה

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

  • התאמת ההטמעה לדפוסי ממשק משתמש

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

preloadingStrategy.png
  • שימוש ב-Media3 כדי לשמור על תקינות הקוד לטווח הארוך

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

  • הטמעה של אופטימיזציות שמותאמות למכשיר

כדי להרחיב את טווח ההגעה לשוק, כדאי לבצע בדיקות במכשירים שונים, כולל דגמים בינוניים עד נמוכים. שימוש באותות בזמן אמת כמו מעבד (CPU), זיכרון וקלט/פלט (I/O) כדי להתאים את התכונות ואת השימוש במשאבים באופן דינמי.

מידע נוסף

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

עכשיו אתם יודעים את הסודות להפעלה מיידית. כדאי לנסות אותם!

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