מקרים לדוגמה

אינסטגרם ופייסבוק מספקות הפעלה מיידית ומגבירות את רמת המעורבות של משתמשים באמצעות Media3 PreloadManager

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

בעולם הדינמי של הרשתות החברתיות, תשומת הלב של המשתמשים היא משאב שקל להשיג וקל לאבד. האפליקציות של Meta‏ (Facebook ו-Instagram) הן בין הרשתות החברתיות הגדולות בעולם, והן משרתות מיליארדי משתמשים ברחבי העולם. ב-Meta, הצגת סרטונים בצורה חלקה היא לא רק תכונה, אלא הליבה של חוויית המשתמש. סרטונים קצרים, במיוחד בפיד החדשות של פייסבוק וב-Reels באינסטגרם, הפכו למניע עיקרי של מעורבות. הם מאפשרים ביטוי יצירתי וצריכת תוכן מהירה, ומחברים בין אנשים ברחבי העולם ומבדרים אותם. 

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

הפער בזמן האחזור בסרטונים קצרים

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

הדרך להתקדם עם Media3 PreloadManager

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

איך Meta השיגה הפעלה מיידית אמיתית

מורכבויות קיימות

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

שילוב של Media3 PreloadManager

כדי להפעיל את הסרטונים באופן מיידי, צוות Media Foundation Client של Meta שילב את PreloadManager של Jetpack Media3 בפייסבוק ובאינסטגרם. הם בחרו ב-DefaultPreloadManager כדי לאחד את מערכות הטעינה מראש וההפעלה שלהם. השילוב הזה דרש ארגון מחדש של הארכיטקטורה הקיימת של Meta כדי לאפשר שיתוף משאבים יעיל בין המופעים של PreloadManager ו-ExoPlayer. השינוי האסטרטגי הזה סיפק יתרון ארכיטקטוני משמעותי: היכולת לבצע משימות טעינה מראש במקביל ולנהל סרטונים רבים באמצעות מופע נגן אחד. השינוי הזה הגדיל באופן משמעותי את קיבולת הטעינה מראש, וביטל את המורכבות של הזיכרון הגבוה בגישה הקודמת.

colinKho.png

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

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

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

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

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

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

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

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

mirabelHu.png

יתרונות ארכיטקטוניים ותקינות הקוד

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

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

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

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

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

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

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

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

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

  • התאמת ההטמעה לתבניות של ממשק המשתמש

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

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

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

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

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

מידע נוסף

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

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

כותב/ת המסמך:
להמשך קריאה