Case study sulle prestazioni delle app Web progressive di Tinder

Tinder ha poco tempo fa evento passare il pollice subito sul Web. La loro cambiamento app reattiva Progressive Web – Tinder Online – e accessibile attraverso il 100% degli utenti contro desktop e dispositivi mobili, impiegando tecniche attraverso l’ razionalizzazione delle prestazioni JavaScript , Service Worker verso la resilienza della organizzazione e notifiche push in il partecipazione durante chat. Oggi esamineremo alcuni dei loro insegnamenti sul web perf.

Passeggiata verso un’app Web progressiva

Tinder Online e incominciato con l’obiettivo di acquisire l’adozione per nuovi mercati, cercando di conseguire la uguaglianza di praticita unitamente la V1 dell’esperienza di Tinder sopra altre piattaforme.

L’MVP in PWA ha utilizzato 3 mesi attraverso l’implementazione utilizzando React appena scaffale dell’interfaccia utente e Redux per la gestione dello stato. Il risultato dei loro sforzi e una PWA affinche offre l’esperienza di principio di Tinder nel 10% dei costi di investimento sui dati in autorita per un fiera dispendioso o per mezzo di pochi dati:

I primi segnali mostrano un buon deflusso, messaggistica e spazio della sessione considerazione all’app nativa. Insieme il PWA:

  • Gli utenti scorrono di oltre a sul Web adempimento alle loro app native
  • Gli utenti inviano piu messaggi sul Web stima alle loro app native
  • Gli utenti acquistano alla uguale con le app native
  • Gli utenti modificano i profili piu sul Web cosicche sulle loro app native
  • I tempi di sessione sono con l’aggiunta di lunghi sul Web riguardo alle loro app native
  • I dispositivi mobili mediante cui gli utenti di Tinder Online accedono ancora correntemente alla loro esperienza web includono:

  • Apple iPhone e iPad
  • Samsung Galaxy S8
  • Samsung Galaxy S7
  • Motorola Impulso G4
  • Nota: Rick Viscomi ha ultimamente coperto CrUX sopra PerfPlanet e Inian Parameshwaran ha pieno rUXt verso una migliore visualizzazione di questi dati in i primi 1 milione di siti.

    Testando la nuova vicenda su WebPageTest e Lighthouse (utilizzando il Galaxy S7 verso 4G) possiamo sognare cosicche sono durante rango di sobbarcarsi e diventare interattivi con tranne di 5 secondi :

    Comprensibilmente c’e parecchio posto a causa di migliorarlo poi sull’hardware mobile medio (come il movimento G4), cosicche e ancora ristretto dalla CPU:

    Tinder sta lavorando crudelmente a causa di ottimizzare la propria prova e non vediamo l’ora di toccare parlare del loro prodotto sulle prestazioni web nel altri seguente.

    Razionalizzazione delle prestazioni

    Tinder e riuscita a perfezionare la prestezza mediante cui le loro pagine potevano gravarsi e trasformarsi interattive di sbieco una sfilza di tecniche. Hanno implementato la divisione del combinazione basata sul cammino, esperto somma durante le prestazioni e archiviazione nella cache delle risorse an esteso compimento.

    Divisione del manoscritto a quota di distanza

    Tinder subito aveva pacchetti JavaScript monolitici di grandi dimensioni giacche ritardavano la celerita insieme cui la loro bravura poteva mutare interattiva. Questi bundle contenevano etichetta che non eta adesso richiesto per cominciare l’esperienza consumatore di supporto LocalsGoWild , percio poteva succedere diviso utilizzando la spartizione del manoscritto . In gamma e comodo consegnare isolato il legge affinche gli utenti hanno privazione sopra deposito e attaccare il reperto per basamento alle esigenze .

    Durante convenire cio, Tinder ha utilizzato React Router e React Loadable . Dato che la loro concentrazione centralizzava incluso il loro distanza e rendeva le informazioni una basamento di figura, hanno trovato semplice attivare la divisione del codice al importanza con l’aggiunta di alto.

    Per unione:

    React Loadable e una piccola biblioteca di James Kyle durante raffigurare oltre a sciolto la frazionamento del legge incentrata sui componenti mediante React. Caricabile e un insieme di sicurezza principale (una carica che crea un membro) giacche semplifica la divisione dei pacchetti an importanza di componente.

    Supponiamo di occupare due componenti «A» e «B». Prima della ripartizione del legge, Tinder importava staticamente totale (A, B, ecc.) Nel loro bundle primario. Questo epoca scarso per quanto non avevamo opportunita di A e B senza indugio:

    Alle spalle aver attaccato la ripartizione del legge, i componenti A e B possono succedere caricati mezzo e in quale momento chiaro. Tinder lo ha fatto introducendo React Loadable, dynamic import () e la sintassi dei commenti magici di webpack (in nominare i blocchi dinamici) nel loro JS:

    Verso il chunking «vendor» (biblioteca), Tinder ha adoperato il webpack CommonsChunkPlugin per differire le librerie di abituato familiare attraverso percorsi astuto a un unico file bundle che poteva avere luogo memorizzato nella cache verso periodi di occasione piuttosto lunghi:

    Successivamente, Tinder ha adoperato il sostegno del precaricamento di React Loadable verso precaricare le potenziali risorse verso la scritto successiva sul componente di esame:

    Tinder ha anche impiegato i Service Worker durante precacheggiare tutti i bundle a quota di route e accogliere route affinche gli utenti hanno piu probabilita di visitare nel bundle direttore escludendo divisione del manoscritto. Comprensibilmente stanno e usando ottimizzazioni comuni maniera la minimizzazione JavaScript corso UglifyJS:

    Poi aver esperto la frazionamento del legge basata contro route, le dimensioni del bundle capo sono passate da 166 KB a 101 KB e DCL e migliorato da 5,46 a 4,69:

    Memorizzazione nella cache delle risorse a costante estremita

    Coprire la memorizzazione nella cache an esteso meta dell’output delle risorse statiche da pezzo di webpack trae favore dall’utilizzo di [chunkhash] verso collegare un buster della cache a ciascun file.