איך Disney+ Hotstar הגדילה את מספר הצפיות בכרטיסים השבועיים ב-100% במכשירים בסלון והפחיתה את ה-INP ב-61%

שיפור האינטראקציה עם התכונה 'הצבע הבא' (INP) בטלוויזיה חכמה ובממירים מהווה אתגר משמעותי יותר מאשר בדפדפנים במחשב, בגלל האילוצים של תמיכת API מוגבלת ומפרטי מערכת צנועים. במקרה לדוגמה הזה, תראו כיצד Disney+ Hotstar התמודדה בהצלחה עם מכשולים אלו וכתוצאה מכך השיגה יתרונות עסקיים משמעותיים.

Bhuvaneswaran Mohan
Bhuvaneswaran Mohan
Saurabh Rajpal
Saurabh Rajpal

בעקבות השימוש הגובר במכשירים לשימוש בסלון, Disney+ Hotstar זיהתה שחוויית גלישה חלקה באפליקציה שלה עבור טלוויזיות חכמות וממירים היא דרישה עסקית חיונית. עם זאת, מה מקשה על תיקון INP במכשירים כאלה הוא שכל דגם טלוויזיה מסוים עשוי להשתמש בגרסאות דפדפן ישנות מאוד — לדוגמה, בטלוויזיות LG TV 2020 נעשה שימוש ב-Chrome 68 שהושק בשנת 2018. חלק מהמכשירים האלה מסווגים גם כמכשירים פשוטים. כלומר, הם לא יכולים להגיב לאינטראקציות באותה מהירות כמו טאבלטים ומחשבים ניידים.

בתרשים הבא מוצגת השוואה בין משך הזמן שנדרש לטעינת דף, כאשר המחשב נייד והמעבד (CPU) שלו איטיים פי 6 לאחר הפעלתם בכלי הפיתוח של Chrome לעומת טלוויזיה חכמה. כפי שאפשר לראות, המחשב הנייד עדיין מהיר הרבה יותר מאשר טלוויזיה חכמה שיוצרת לאחרונה.

צילום מסך של הכלי לניתוח ביצועים (Performance profiler) בכלי הפיתוח ל-Chrome, שמייצג את ביצועי הטעינה של אפליקציית Disney+ HotStar במחשב נייד. מדד מותאם אישית בשם PAGE_RENDER_TIME מופיע לאחר 1.39 שניות.
הפרופיל (זמן רינדור דף באורך 1.3 שניות) ממחשב נייד עם האטה פי 6 של יחידת העיבוד המרכזית (CPU) ועד לדמות תצורה של דפדפן טלוויזיה. PAGE_RENDER_TIME הוא מדד מותאם אישית המשמש לתיעוד הזמן שחולף מרגע הצגת הרכיב הראשון של הדף ועד להשלמת ניתוח ה-HTML.
צילום מסך של הכלי לניתוח ביצועים (profiler) בכלי הפיתוח ל-Chrome, שמייצג את ביצועי הטעינה של האפליקציה Disney+ HotStar במכשיר טלוויזיה חכמה אמיתי. מדד מותאם אישית בשם PAGE_RENDER_TIME מופיע לאחר 6.47 שניות.
פרופיל (רינדור דף של 6.47 שניות) מטלוויזיה בפועל עם ניפוי באגים מרחוק עם אפליקציית טלוויזיה שפועלת ב-Chrome.

למרות שהבדיקות האלה הניבו נתוני מעבדה, Disney+ Hotstar התחילה לאסוף נתוני שטח עבור Interaction to Next Paint (INP) של משתמשי האפליקציה בפועל באמצעות ספריית אתרי האינטרנט. אצל 75% ממשתמשי האפליקציה נהנו מ-INP של 675 אלפיות שנייה בשדה, שנחשב לחוויית משתמש 'חלשה' לפי ספי ה-INP.

מקרה לדוגמה שמראה איך Disney+ Hotstar שיפרה את הרספונסיביות באפליקציות הסטרימינג שלה, במיוחד במכשירים המתקדמים. הם השיגו שיפור של 61% לאחר שערכי ה-INP ירדו ל-272 אלפיות השנייה – עדיין מעל לסף ה'טוב' המומלץ של 200 אלפיות השנייה, אבל שיפור משמעותי בכך.

הממצאים

Disney+ Hotstar ביצעה הטמעה באפליקציה באמצעות ה-method onINP מגרסת השיוך (Attribution) של ספריית אתרי האינטרנט. במהלך השלב הראשוני נתקלנו באתגרים שונים, במיוחד בזיהוי רכיב היעד המדויק. הבעיה התעוררה כי כל ההתייחסויות לגוף ההודעה נבעו מספריית ניווט מרחבי של צד שלישי, שנעשה בה שימוש עם התאמות מסוימות באפליקציית Disney+ Hotstar. הספרייה הזו מאזינה אך ורק לאירועים בגוף המסמך, ולאחר מכן קובעת איזה רכיב ממוקד בפועל וחוזה את המיקוד הבא על סמך לחיצות מרחוק על מקשים.

ב-Disney+ Hotstar בשלב הראשון פתרו את בעיית השיוך כדי שאפשר יהיה לזהות כראוי אינטראקציות שאחראיות לערכי INP גבוהים. לשם כך, Disney+ Hotstar תיעד את המאפיין focusKey שכבר קיים בספריית הניווט המרחבי של הרכיב הנוכחי שנמצא כעת, וכן מפה של כל הרכיבים בדף שניתן להתמקד בהם. הערכים האלה דומים ליעד האינטראקציה הזמין בגרסת ה-build של שיוך אירועי אינטרנט.

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

עכשיו, לאחר יישום מדידה ושיוך מתאימים, הממצאים שמתקבלים מנתוני השדות דיווחו על האינטראקציות הבאות כבעייתיות ביותר עבור INP:

  1. ניווט אופקי במגש קרוסלה.
  2. ניווט במגש קרוסלה אנכי.
  3. אינטראקציות במהלך הטעינה הראשונית של הדף.
צילום מסך של הרכיב שאחראי לניווט בקרוסלת המגש באמצעות מקש המיקוד שלו.
רשומה במרכז הבקרה שמוצגת בה התרומה ל-INP באמצעות ניווט בקרוסלת המגש.

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

בדף הבית, יצרנו עץ על ידי ספריית הניווט המרחבי באופן הבא:

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

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

פתרון הבעיות

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

שיפורים בניווט במגש האופקי

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

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

כך נראה עץ הניווט המרחבי לאחר האופטימיזציות האלה.

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

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

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

כתוצאה מהעבודה הזו, ב-Disney+ Hotstar נרשמה ירידה משמעותית במדד ה-INP של האפליקציה בשדה. הם גם הצליחו לחסוך כ-35KB (דחוס) על ידי הסרת הספרייה של הצד השלישי. כבונוס, השיפורים האלה גם אפשרו ל-Disney+ Hotstar לקצר את משך הזמן של המדד המותאם אישית שבו הם משתמשים כדי למדוד את זמן הרינדור הכולל של דף הבית, מכיוון שפריסות מופעלות פחות פעמים בגלל צמצום של צמתים של ניווט מרחבי.

סדרת זמנים של המדד המותאם אישית של זמן רינדור הדף עבור tizentv ו-webos, אשר ירד ב-31% וגם ב-25.2% בהתאמה, החל מ-13 במרץ עד 19 במרץ במסגרת הזמן.
מגמת ירידה בזמני העיבוד של דפים לפי מערכת ההפעלה של TV (Samsung-Tizen ו-WebOS-LG).

שיפורים בניווט במגש אנכי

Disney+ Hotstar גם שיפרה את ביצועי הניווט במגשים האנכיים על ידי טעינה מדורגת של המגשים במקום טעינה של כולם מראש. לכן, בטעינת הדף, במקום לטעון 10 מופעים של המגש, שבתוך כל אחד מהם יש רכיב קרוסלה ומספר תמונות – האפליקציה טוענת רק את שני המגשים שגלויים באזור התצוגה, וגם מגש נוסף מעל ומתחת. בנוסף, העיבוד פוצל לכמה משימות באמצעות שיטת התפוקה setTimeout(), כך של-thread הראשי יש יותר הזדמנויות לטפל באינטראקציות של משתמשים.

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

אינטראקציות במהלך הטעינה הראשונית של הדף

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

ב-Disney+ Hotstar הבינו שהם מעבדים יותר סקריפטים ממה שהם היו נחוצים בפועל במהלך הפעלת האפליקציה (זמן מסך הפתיחה) כדי להאיץ את טעינת הדפים בעתיד. כתוצאה מכך נצברו עוד משימות להערכת הסקריפטים, ולפעמים עלולה להיות לכך השפעה שלילית על INP.

כדי לפתור את הבעיה, ב-Disney+ Hotstar החליטו לטעון באופן דינמי את רוב הנכסים, כדי לחסוך זמן במהלך ההפעלה של האפליקציה. עם זאת, פעולה זו תגרום לזמני טעינה ארוכים יותר של ניווטים לדפים עתידיים, מאחר ש-JavaScript זה לא ייטען עוד מראש עם שינוי זה. כדי לפתור את הבעיה, Disney+ Hotstar פיתחה ספרייה פנימית לטעינה מראש של נכסים שקובעת איזה דף עשוי להופיע בתהליך שעובר המשתמש, ותטען מראש את הנכסים בדף הזה. למשל:

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

אופטימיזציה של טעינת הנכסים עזרה ל-Disney+ Hotstar בשני דברים: להפחית את ה-INP של האפליקציה (מכיוון שה-thread הראשי היה עכשיו פנוי יחסית לביצוע אינטראקציות של משתמשים), וגם להפחית את השימוש בזיכרון במכשירים ברמה נמוכה.

השינויים האלה הובילו לירידה של 32% במספר ה-INP המדווח מהשדה, כפי שניתן לראות בצילום המסך הבא.

סדרת זמנים של ערכי INP החל מ-13 באוגוסט וב-11 בספטמבר. במהלך התקופה הזו, מוצגת ירידה של 32% ב-INP.
צמצום INP לשיפורים במגש.

שיפורים אחרים

ב-Disney+ Hotstar גם הבינו שיש משימות ארוכות על מספר אירועי משתמשים שאפשר לפצל על ידי פנייה ל-thread הראשי לעיתים קרובות, והתקדמו צעד אחד קדימה ויצרו כלי למחולל משימות שיאפשר למשתמשים לבטל את המשימה באמצע הביצוע.

לדוגמה, כשמשתמש מנווט בין כמה כרטיסים במגש, זה מה שקורה:

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

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

כלי מחולל המשימות של Disney+ Hotstar מקבל פונקציה שהיא משימה, וכשמשימה אחרת מגיעה באמצע, המשימה הקודמת מתבטלת ונחסכת לנו ביצוע בלתי רצוי של המשימה ומפעילה במהירות את המשימה הנדרשת.

תוצאות

באופן כללי, אפליקציית INP של Disney+ Hotstar צנחה מ-675 אלפיות השנייה ל-272 אלפיות השנייה, מה שמייצג שיפור של כמעט 60%! בנוסף, זמן האחזור של אינטראקציות במגש ירד באופן ספציפי מ-400 אלפיות השנייה לכ-100 אלפיות השנייה.

ערך INP זמני מתחיל מ-23 באוגוסט עד 21 בספטמבר. בפרק זמן זה נרשמה ירידה של 61% ב-INP.

ההשפעה על העסק: מספר הצפיות השבועיות בכרטיסים גדל מ-111 ל-226 למשתמש! מדובר בעלייה של 100%, שמראה שממשק מהיר ורספונסיבי יותר ישפר את מעורבות המשתמשים למשך פרקי זמן ארוכים יותר.

צילום מסך של סדרת זמנים שמציג עלייה של 100% במספר הצפיות השבועיות בכרטיסים באפליקציית Disney+ HotStar עבור tizentv ו-webos. עלייה חדה מאוד אחרי 4 באפריל 2004.

זו רק ההתחלה, ו-Disney+ Hotstar היא השיטה שבה מתבססים על מדד INP כדי לשפר את ביצועי הרינדור והאינטראקציה. הצוות ישמח להפוך את Disney+ Hotstar לחוויה חלקה עבור הלקוחות שלה בעתיד הקרוב.

תודה לאיוש, אג'יי, קיראן, מילאנו ורישה מ-Disney+ Hotstar על מאמציהם להמיר את הגאות.

תודה מיוחדת לאנקיט מיין (Ankeet Mini), מנהל ההנדסה של Disney+ Hotstar, ו-Rahul Krishan P (מנהל חוויית הלקוח של Disney+ Hotstar) לצורך תמיכה בפעילות החדשנות הזו, וג'רמי וגנר (Gilberto), בארי פולרד (Barry Pollard) וברנדן קני (Brendan Kanny) מ-Google על הביקורת והעזרה בפרסום המקרה לדוגמה.