Ecco come Disney+ Hotstar ha aumentato del 100% le visualizzazioni settimanali delle schede sui dispositivi in salotto diminuendo l'INP del 61%

Migliorare l'interazione con Next Paint (INP) sulle smart TV e sui dispositivi decoder presenta molte più sfide rispetto ai browser desktop, a causa dei limiti di un supporto API limitato e di specifiche di sistema modeste. In questo case study, scoprirai in che modo Disney+ Hotstar ha affrontato con successo questi ostacoli e ha ottenuto vantaggi aziendali significativi.

Bhuvaneswaran Mohan
Bhuvaneswaran Mohan
Saurabh Rajpal
Saurabh Rajpal

Con la crescente adozione di dispositivi da soggiorno, Disney+ Hotstar si è resa conto che fornire un'esperienza di navigazione senza interruzioni nell'app per smart TV e decoder è un requisito aziendale fondamentale. Tuttavia, ciò che rende più difficile risolvere il problema INP per questi dispositivi è che un determinato modello di TV potrebbe utilizzare versioni del browser molto vecchie, ad esempio una TV LG del 2020 utilizza Chrome 68 rilasciato nel 2018. Alcuni di questi dispositivi possono essere classificati anche come dispositivi di fascia bassa, vale a dire che non sono in grado di rispondere alle interazioni con la stessa velocità dei tablet e dei laptop di punta.

La figura che segue mette a confronto il tempo necessario per caricare una pagina tra un laptop con la CPU rallentata di sei volte in Chrome DevTools e una smart TV. Come si può vedere, il laptop è ancora molto più veloce di una smart TV di recente produzione.

Uno screenshot del profiler delle prestazioni in Chrome DevTools che profila le prestazioni di caricamento dell'app Disney+ HotStar su un laptop. Una metrica personalizzata denominata PAGE_RENDER_TIME arriva a 1,39 secondi.
Profilo (tempo di rendering della pagina di 1,3 s) da un laptop con un rallentamento della CPU 6x per simulare la configurazione del browser della TV. PAGE_RENDER_TIME è una metrica personalizzata utilizzata per acquisire il tempo che intercorre tra la visualizzazione del primo componente della pagina e il completamento dell'analisi HTML.
Uno screenshot del profiler delle prestazioni in Chrome DevTools che profila le prestazioni di caricamento dell'app Disney+ HotStar su una smart TV effettiva. Una metrica personalizzata denominata PAGE_RENDER_TIME è di 6,47 secondi.
Profilo (rendering della pagina di 6,47 secondi) da una TV effettiva utilizzando il debug remoto con l'app per TV in esecuzione in Chrome.

Mentre questi test producono dati di laboratorio, Disney+ Hotstar ha iniziato a raccogliere dati sul campo per Interaction to Next Paint (INP) dagli utenti effettivi dell'app utilizzando la libreria di elementi vital web e ha osservato che il 75% degli utenti dell'app ha riscontrato un INP di 675 millisecondi sul campo, che è considerato un'esperienza utente "scarsa" secondo la INP.

Questo case study spiega in che modo Disney+ Hotstar ha migliorato la reattività nelle applicazioni di streaming, in particolare sui dispositivi di fascia bassa. Ha ottenuto un miglioramento del 61% portando i valori INP a 272 millisecondi, ancora al di sopra della soglia consigliata di 200 millisecondi, ma un miglioramento sostanziale rispetto a questa soglia.

I risultati

Disney+ Hotstar ha strumentato l'app utilizzando il metodo onINP della raccolta di eventi web vital della build di attribuzione. Durante la fase iniziale, sono state riscontrate diverse sfide, soprattutto nell'identificazione dell'esatto elemento bersaglio. Il problema si è verificato perché tutti i riferimenti puntavano al corpo a causa di una libreria di navigazione spaziale di terze parti che è stata utilizzata con alcune personalizzazioni nell'app Disney+ Hotstar. Questa raccolta ascolta esclusivamente gli eventi presenti nel corpo del documento e successivamente determina l'elemento attivo effettivo e prevede il focus successivo in base alla pressione dei tasti da remoto.

Disney+ Hotstar ha iniziato risolvendo innanzitutto il problema dell'attribuzione, in modo da identificare correttamente le interazioni responsabili di valori INP elevati. Per questo motivo, Disney+ Hotstar ha registrato l'attributo focusKey, già presente nella libreria di navigazione spaziale per l'elemento attualmente attivo, nonché la mappa di tutti gli elementi attivabili nella pagina, il che è analogo al target di interazione disponibile nella build dell'attribuzione degli eventi web vital.

Uno screenshot di un elenco di elementi, in base al relativo attributo focusKey, insieme alla latenza dell'interazione di ciascuno.
Acquisizione di focusKey e del percorso dell'elemento che lo attiva.

Ora, con l'implementazione di misurazioni e attribuzioni adeguate, i risultati dei dati sul campo hanno segnalato le seguenti interazioni come le più problematiche per INP:

  1. Navigazione orizzontale nella barra delle app del carosello.
  2. Navigazione nella barra del carosello verticale.
  3. Interazioni durante il caricamento iniziale della pagina.
Uno screenshot dell'elemento responsabile della navigazione del carosello nella barra delle app tramite il relativo tasto di stato attivo.
Voce della dashboard che mostra il contributo alla navigazione INP tramite carosello nella barra delle app.

Dopo aver profilato queste interazioni con il riquadro delle prestazioni in Chrome Dev Tools, ci siamo resi conto che la libreria di navigazione spaziale leggeva la posizione di tutti gli elementi attivabili e ha creato un nuovo albero. Si tratta di un'operazione costosa che attiva il thrash del layout per ogni interazione, ad esempio lo spostamento da un elemento all'altro.

Per la home page, la libreria di navigazione spaziale ha generato un albero nel seguente modo:

Un albero di esempio generato dalla libreria di navigazione spaziale. Sotto la radice ci sono i nodi Navbar e Tray Container. In particolare, il nodo Contenitore vassoio contiene tre nodi scheda, ognuno dei quali ha numerosi sottonodi che contribuiscono a generare un DOM di grandi dimensioni.
Albero di navigazione spaziale precedente per la home page.

Ciò significa che, se l'app mostrava 10 vassoi e ogni vassoio aveva 7 schede, ci sarebbero stati 70 elementi attivabili per il contenitore dei vassoi, inclusi gli elementi di navigazione. Si tratta di un numero elevato di elementi interattivi. È stata anche utilizzata una libreria carosello di terze parti, che ha letto le dimensioni di ogni scheda durante la navigazione orizzontale per tradurre il contenitore, aggiungendo ulteriore latenza di interazione.

Risoluzione dei problemi

C'erano diversi problemi che dovevano essere tutti risolti separatamente per risolvere i problemi di reattività dell'app in generale.

Miglioramenti alla navigazione nella barra orizzontale

Disney+ Hotstar ha creato la propria raccolta di carosello interna che non attiva il thrash del layout utilizzando animazioni composite e leggendo le dimensioni una volta per vassoio anziché una volta per scheda.

La navigazione spaziale si concentra solo sulla radice del carosello e, per un'ulteriore navigazione orizzontale, entra in scena il nostro carosello personalizzato. Con questo approccio, Disney+ Hotstar ha rimosso la dipendenza dalla navigazione spaziale e dalla vecchia libreria a carosello che legge le dimensioni di ogni navigazione.

Ecco come si è comportata l'albero di navigazione spaziale per queste ottimizzazioni.

Un albero ottimizzato di esempio generato dalla libreria di navigazione spaziale, che è notevolmente ottimizzata rispetto alla versione precedente, e contiene molti meno nodi.
Albero di navigazione spaziale dopo l'ottimizzazione.

Le immagini che seguono sono un confronto delle prestazioni misurato nel riquadro delle prestazioni di Chrome DevTools prima e dopo l'implementazione del carosello.

Uno screenshot del riquadro delle prestazioni in Chrome DevTools relativo alle attività avviate dal carosello di terze parti. Esistono numerose attività lunghe che ritardano l'interattività.
Carosello di terze parti.
Uno screenshot del riquadro delle prestazioni in Chrome DevTools per le attività avviate dal carosello interno. Rispetto al carosello di terze parti, ci sono attività molto meno lunghe e le interazioni avvengono più rapidamente.
Carosello interno.

Il risultato è che Disney+ Hotstar ha registrato una riduzione significativa dell'INP della sua app nel campo. Sono anche riusciti a risparmiare circa 35 kB (compressi) rimuovendo la libreria di terze parti. Come bonus, questi miglioramenti hanno anche consentito a Disney+ Hotstar di ridurre la durata della metrica personalizzata utilizzata per misurare il tempo di rendering totale della home page, poiché i layout vengono attivati meno spesso a causa della riduzione dei nodi di navigazione spaziale.

Una serie temporale della metrica personalizzata del tempo di rendering della pagina sia per tizentv che per i webos, che è diminuita rispettivamente del 31% e del 25,2% a partire dal 13 marzo al 19 marzo.
Tendenza in calo dei tempi di rendering delle pagine per sistema operativo TV (Samsung-Tizen e WebOS-LG).

Miglioramenti alla navigazione nella barra verticale

Disney+ Hotstar ha migliorato anche le prestazioni della navigazione verticale mediante il caricamento lento dei vassoi anziché tutti in primo piano. Quindi, al caricamento della pagina, invece di caricare 10 istanze del vassoio, che internamente hanno un componente carosello e una serie di immagini, l'app carica solo i due vassoi visibili nell'area visibile, oltre a un cassetto aggiuntivo sopra e sotto. Inoltre, il rendering è stato suddiviso in più attività utilizzando la strategia di rendimento setTimeout(), in modo che il thread principale abbia maggiori opportunità di gestire le interazioni degli utenti.

Una visualizzazione stilizzata delle attività per l'esecuzione di gestori di eventi e degli aggiornamenti del rendering. Gli aggiornamenti del rendering vengono posticipati dopo una singola attività lunga.
Una singola attività a lunga esecuzione seguita dal rendering prima del miglioramento della barra verticale.
Un'altra visualizzazione della stessa attività della figura precedente, ma le attività sono frammentate a causa della resa, il che consente di eseguire il rendering prima.
Più attività suddivise dopo il miglioramento della barra verticale, con opportunità di rendering tra le attività suddivise.

Interazioni durante il caricamento iniziale della pagina

Il valore INP sarà elevato per le applicazioni che elaborano un numero elevato di script durante l'avvio dell'app. Questo accade perché il browser deve scaricare, analizzare e valutare questi script. Mentre tutto questo accade, il thread principale rimarrà occupato per molto tempo e non sarà in grado di rispondere rapidamente alle interazioni degli utenti.

Disney+ Hotstar si è resa conto che stava elaborando più script del necessario all'avvio dell'applicazione (il tempo della schermata iniziale) per rendere più veloce il caricamento delle pagine future. Ciò ha comportato ulteriori attività di valutazione degli script, che hanno il potenziale anche di influire negativamente su INP.

Per risolvere il problema, Disney+ Hotstar ha preso in considerazione il caricamento dinamico della maggior parte delle risorse, in modo da risparmiare tempo durante l'avvio dell'app. Tuttavia, questo avrebbe aumentato i tempi di caricamento per le navigazioni alle pagine future, poiché JavaScript non verrà più caricato prima di questa modifica. Per far fronte a questo problema, Disney+ Hotstar ha sviluppato una raccolta interna di preloader di risorse che determina quale pagina verrà visualizzata dopo nel percorso dell'utente e precarica le risorse per quella pagina. Ad esempio:

  • Quando un utente si trova nella pagina di accesso, la raccolta del precaricatore degli asset precarica gli asset per la pagina di selezione del profilo.
  • Nella pagina di selezione del profilo, vengono caricati gli asset della home page.
  • Nella home page vengono caricati gli asset della pagina dei dettagli.
  • Infine, le risorse della pagina di visualizzazione vengono caricate nella pagina dei dettagli.

L'ottimizzazione del caricamento degli asset ha aiutato Disney+ Hotstar con due cose: ridurre l'INP dell'app (dato che il thread principale ora era relativamente libero di eseguire interazioni degli utenti) e anche ridurre l'utilizzo della memoria sui dispositivi di basso livello.

Queste modifiche hanno portato a una diminuzione del 32% del numero INP segnalato dal campo, come puoi vedere nello screenshot seguente.

Una serie temporale di valori INP a partire dal 13 agosto e dall'11 settembre. Durante questo periodo, si registra una riduzione del 32% dell'INP.
Riduzione INP per miglioramenti al vassoio.

Altri miglioramenti

Disney+ Hotstar ha anche capito che c'erano attività lunghe su alcuni eventi utente che potevano essere suddivise restituendo spesso al thread principale, quindi ha fatto un passo in più e ha creato un'utilità di generazione di attività che consentirà agli utenti di annullare l'attività durante l'esecuzione.

Ad esempio, quando l'utente naviga tra più schede sulla barra, si verifica quanto segue:

  • La scheda successiva è evidenziata.
  • La carta viene tradotta, se necessario.
  • In evidenza è aggiornato.
  • Il trailer, se presente, viene recuperato e viene avviata la riproduzione.
  • Gli eventi di Analytics vengono attivati per l'azione.

Se, durante questo processo, l'utente si concentra sulla scheda successiva, non sarà necessario eseguire gli altri passaggi. Ad esempio, il recupero del trailer e l'inizializzazione del player per un determinato titolo non sono più necessari se l'utente è passato alla scheda successiva. Di conseguenza, queste attività possono essere interrotte per liberare il thread principale.

L'utilità di generazione di attività di Disney+ Hotstar accetta una funzione che è un'attività e quando un'altra attività viene nel mezzo, quella precedente viene interrotta consentendoci di eseguire l'attività non necessaria e di agire rapidamente sull'attività necessaria.

Risultati

Nel complesso, l'INP dell'applicazione Disney+ Hotstar è sceso da 675 a 272 millisecondi, rappresentando un miglioramento di quasi il 60%. Inoltre, le latenze di interazione della barra sono diminuite da circa 400 millisecondi a circa 100 millisecondi.

Valori INP della serie temporale dal 23 agosto al 21 settembre. In questo periodo di tempo è stata realizzata una riduzione del 61% dell'INP.

L'impatto sull'attività: le visualizzazioni settimanali delle schede sono aumentate da 111 a 226 per utente. Si tratta di un aumento del 100%, a dimostrazione che un'interfaccia più veloce e più reattiva ha maggiori probabilità di coinvolgere gli utenti per periodi di tempo più lunghi.

Uno screenshot di una serie temporale che mostra un aumento del 100% delle visualizzazioni settimanali delle schede sull'app Disney+ HotStar sia per tizentv che per webos. L’aumento si verifica molto dopo il 4 aprile 2004.

Questo è solo l'inizio e Disney+ Hotstar ha appena iniziato a migliorare le prestazioni di rendering e interazione con la metrica INP come guida. Il team è entusiasta di rendere Disney+ Hotstar un'esperienza fluida per i clienti nel prossimo futuro.

Grazie ad Ayush, Ajay, Kiran, Milan e Richa di Disney+ Hotstar per il loro impegno nel cambiare le sorti.

Un ringraziamento speciale a Ankeet Maini, Engineering Head Disney+ Hotstar, e Rahul Krishnan P, Head of Customer Experience Disney+ Hotstar per il supporto di questo lavoro di innovazione, e a Jeremy Wagner, Gilberto, Barry Pollard e Brendan Kenny di Google per la revisione e il contributo alla pubblicazione di questo case study.