So wurde Mercado Libre für Web Vitals (TBT/FID) optimiert

Die Interaktivität von Produktdetailseiten wurde optimiert, um den maximalen potenziellen FID-Wert in Lighthouse um 90% und den FID-Wert im Bericht zur Nutzererfahrung in Chrome um 9% zu senken.

Carlos Aranha
Carlos Aranha
Demián Renzulli
Demián Renzulli
Joan Baca
Joan Baca

Mercado Libre ist das größte E-Commerce- und Zahlungssystem in Lateinamerika. Das Unternehmen ist in 18 Ländern vertreten und in Brasilien, Mexiko und Argentinien (gemessen an den einzelnen Besuchern und Seitenaufrufen) Marktführer.

Webleistung liegt schon lange im Fokus des Unternehmens. Vor Kurzem hat das Unternehmen jedoch ein Team gebildet, das die Leistung überwachen und Optimierungen in verschiedenen Bereichen der Website vornehmen sollte.

In diesem Artikel wird die Arbeit von Guille Paz, Pablo Carminatti und Oleh Burkhay aus dem Frontend-Architekturteam von Mercado Libre zusammengefasst, um einen der Core Web Vitals zu optimieren: First Input Delay (FID) und dessen Lab-Proxy Total Blocking Time (TBT).

90%

Reduzierung des maximalen potenziellen FID in Lighthouse

%

Mehr Nutzer empfinden FID in CrUX als „schnell“.

Lange Aufgaben, First Input Delay und Total Blocking Time

Das Ausführen von teurem JavaScript-Code kann zu langen Aufgaben führen. Das sind Aufgaben, die länger als 50 ms im Hauptthread des Browsers ausgeführt werden.

FID (First Input Delay) misst die Zeit ab der ersten Interaktion eines Nutzers mit einer Seite (z.B. wenn er auf einen Link klickt) bis zu dem Zeitpunkt, zu dem der Browser tatsächlich in der Lage ist, als Reaktion auf diese Interaktion Event-Handler zu verarbeiten. Eine Website, die teuren JavaScript-Code ausführt, erfordert wahrscheinlich mehrere lange Aufgaben, was sich letztlich negativ auf FID auswirkt.

Für eine gute Nutzerfreundlichkeit sollten Websites einen First Input Delay von weniger als 100 Millisekunden anstreben: Gute fid-Werte sind 2,5 Sekunden, schlechte Werte größer als 4,0 Sekunden.Alles dazwischen muss verbessert werden.

Obwohl die Website von Mercado Libre in den meisten Bereichen eine gute Leistung bot, stellte das Unternehmen im Bericht zur Nutzererfahrung in Chrome fest, dass die Produktdetailseiten einen schlechten FID-Wert aufweisen. Basierend auf diesen Informationen beschloss es, seine Bemühungen auf die Verbesserung der Interaktivität der Produktseiten auf der Website zu konzentrieren.

Mobil- und Desktopversionen einer Mercado Libre-Produktdetailseite
Mobile und Desktop-Versionen einer Mercado Libre-Produktdetailseite.

Über diese Seiten können Nutzer komplexe Interaktionen ausführen, sodass das Ziel darin bestand, die Interaktivität zu optimieren, ohne wertvolle Funktionen zu beeinträchtigen.

Die Interaktivität von Seiten mit Produktdetails messen

FID erfordert einen echten Nutzer und kann daher im Labor nicht gemessen werden. Der Messwert Total Blocking Time (TBT) ist jedoch im Labor messbar, korreliert gut mit FID vor Ort und erfasst auch Probleme, die sich auf die Interaktivität auswirken.

Im folgenden Trace wird beispielsweise, während die Gesamtzeit für die Ausführung von Aufgaben im Hauptthread 560 ms beträgt, nur 345 ms dieser Zeit als Gesamtblockzeit betrachtet (die Summe der Teile jeder Aufgabe, die 50 ms überschreiten):

Eine Aufgabenzeitachse im Hauptthread mit der Blockierungszeit

Mercado Libre nutzte TBT als Proxy-Messwert im Labor, um die Interaktivität von Produktdetailseiten in der Praxis zu messen und zu verbessern.

Hier ist der allgemeine Ansatz, den das Team verfolgt hat:

Lange Aufgaben mit WebPageTest visualisieren

WebPageTest (WPT) ist ein Tool zur Webleistung, mit dem Sie Tests auf echten Geräten an verschiedenen Standorten auf der ganzen Welt durchführen können.

Mercado Libre nutzte WPT, um die Nutzererfahrung zu reproduzieren, indem ein Gerätetyp und ein Standort ausgewählt wurden, der echten Nutzern ähnelt. Konkret entschied sich das Unternehmen für ein Moto 4G-Gerät und Dulles, Virginia, da man sich an die Erfahrungen von Mercado Libre-Nutzern in Mexiko orientieren wollte. Mercado Libre beobachtete die Ansicht des Hauptthreads von WPT und stellte fest, dass mehrere aufeinanderfolgende lange Aufgaben den Hauptthread 2 Sekunden lang blockieren:

Hauptthread-Ansicht der Produktdetailseiten von Mercado Libre.
Hauptthread-Ansicht der Produktdetailseiten von Mercado Libre.

Bei der Analyse des entsprechenden Wasserfalls wurde festgestellt, dass ein erheblicher Teil dieser zwei Sekunden aus dem Analysemodul stammt. Das Haupt-Bundle der Anwendung war groß (950 KB) und das Parsen, Kompilieren und Ausführen dauerte lange.

Wasserfallansicht der Produktdetailseiten
Wasserfallansicht der Produktdetailseiten von Mercado Libre.

Lighthouse zur Bestimmung des maximalen potenziellen FID-Werts verwenden

In Lighthouse können Sie nicht zwischen verschiedenen Geräten und Standorten auswählen, aber es ist ein sehr nützliches Tool, um Websites zu diagnostizieren und Leistungsempfehlungen zu erhalten.

Beim Ausführen von Lighthouse auf Produktdetailseiten fand Mercado Libre heraus, dass Max Potential FID (Max. potenzielle FID) der einzige rot markierte Messwert mit einem Wert von 1710ms war.

Lighthouse-Messwerte in einem PSI-Bericht für die Produktdetailseiten von Mercado Libre.

Mercado Libre hat sich das Ziel gesetzt, seinen maximalen FID-Wert in einem Labortool wie Lighthouse und WebPageTest zu verbessern. Dabei ging es davon aus, dass diese Verbesserungen sich auf die echten Nutzer auswirken und daher in echten Nutzerüberwachungstools wie dem Bericht zur Nutzererfahrung in Chrome sichtbar sein würden.

Lange Aufgaben optimieren

Erste Iteration

Basierend auf dem Hauptthread-Trace legte Mercado Libre das Ziel fest, die beiden Module zu optimieren, die teuren Code ausführen.

Sie begannen damit, die Leistung des internen Tracking-Moduls zu optimieren. Dieses Modul enthielt eine CPU-intensive Aufgabe, die für das Funktionieren des Moduls nicht entscheidend war und daher sicher entfernt werden konnte. Dadurch konnte der JavaScript-Code auf der gesamten Website um 2% reduziert werden.

Anschließend begann das Unternehmen mit der Verbesserung der allgemeinen Paketgröße:

Mercado Libre nutzte den Dienst webpack-bundle-Analyzer, um Optimierungsmöglichkeiten zu ermitteln:

  • Anfangs war das vollständige Lodash-Modul erforderlich. Es wurde durch eine Anforderung pro Methode ersetzt, mit der nur ein Teil von Lodash anstelle der gesamten Bibliothek geladen werden muss. Außerdem wurde es in Verbindung mit lodash-webpack-plugin verwendet, um Lodash noch weiter zu verkleinern.

Außerdem wurden die folgenden Babel-Optimierungen angewendet:

Als Ergebnis dieser Optimierungen konnte die Bundle-Größe um etwa 16% reduziert werden.

Auswirkung messen

Durch die Änderungen wurden die aufeinanderfolgenden langen Aufgaben von Mercado Libre von zwei Sekunden auf eine Sekunde gesenkt:

Hauptthread-Ansicht der Produktdetailseiten von Mercado Libre nach der ersten Optimierungsrunde.
Im oberen Wasserfall von WPT gibt es einen langen roten Balken (in der Zeile Seite ist interaktiv), der zwischen den Sekunden 3 und 5 liegt. Im unteren Wasserfall ist die Leiste in kleinere Teile zerlegt, die den Hauptthread für kürzere Zeit einnehmen.

Lighthouse verzeichnete eine um 57% niedrigere maximale potenzielle First Input Delay:

Lighthouse-Messwerte in einem PSI-Bericht für die Produktdetailseiten von Mercado Libre nach der ersten Optimierungsrunde.

Zweite Iteration

Das Team befasste sich weiter mit langen Aufgaben, um nachfolgende Verbesserungen zu finden.

Detaillierte Ansicht der Hauptthreadansicht der Produktdetailseiten von Mercado Libre nach der ersten Optimierungsrunde.
Anhand der Wasserfall-Methode (nicht abgebildet) konnte Mercado Libre ermitteln, welche Bibliotheken den Hauptthread häufig nutzten (Zeile Browser Main Thread). Die Zeile Page is Interactive (Seite ist interaktiv) zeigt deutlich, dass diese Hauptthreadaktivität die Interaktivität blockiert.

Auf Grundlage dieser Informationen beschloss das Team, die folgenden Änderungen vorzunehmen:

  • Reduzieren Sie die Größe des Haupt-Bundles weiter, um die Kompilierungs- und Parsing-Zeit zu optimieren (z.B. indem Sie doppelte Abhängigkeiten in den verschiedenen Modulen entfernen).
  • Wenden Sie die Codeaufteilung auf Komponentenebene an, um JavaScript in kleinere Blöcke zu unterteilen und ein intelligenteres Laden der verschiedenen Komponenten zu ermöglichen.
  • Sie können die KomponentenHydration aufschieben, um eine intelligentere Verwendung des Hauptthreads zu ermöglichen. Diese Technik wird im Allgemeinen als partielle Hydration bezeichnet.

Auswirkung messen

Der resultierende WebPageTest-Trace zeigte sogar noch kleinere Teile der JS-Ausführung:

Hauptthread-Ansicht der Produktdetailseiten von Mercado Libre nach der zweiten Optimierungsrunde.

Außerdem konnte die maximale potenzielle FID-Zeit in Lighthouse um weitere 60% reduziert werden:

Lighthouse-Messwerte in einem PSI-Bericht für die Produktdetailseiten von Mercado Libre nach der ersten Optimierungsrunde.

Fortschritt für echte Nutzer visualisieren

Labortesttools wie WebPageTest und Lighthouse eignen sich zwar hervorragend zum Iterieren von Lösungen während der Entwicklung, aber das eigentliche Ziel besteht darin, die Nutzerfreundlichkeit für echte Nutzer zu verbessern.

Der Bericht zur Nutzererfahrung in Chrome enthält Messwerte zur Nutzererfahrung mit beliebten Websites. Sie können die Daten aus dem Bericht abrufen, indem Sie Abfragen in BigQuery, PageSpeedInsights oder in der CrUX API ausführen.

Das CrUX-Dashboard ist eine einfache Möglichkeit, den Fortschritt der Kernmesswerte zu visualisieren:

.
FID-Fortschritt von Mercado Libre zwischen Januar 2020 und April 2020. Vor dem Optimierungsprojekt empfanden 82% der Nutzer FID als schnell (unter 100 ms). Danach wurde der Messwert bei mehr als 91% der Nutzer als schnell empfunden.

Nächste Schritte

Die Leistung im Web ist nie zu Ende und Mercado Libre weiß, welchen Wert diese Optimierungen für die Nutzer haben. Das Unternehmen wendet auf der Website weiterhin verschiedene Optimierungen an, darunter den Vorabruf auf Seiten mit Produkteinträgen und Bildoptimierungen. Gleichzeitig werden die Seiten mit Produkteinträgen weiter verbessert, um die Gesamtblockzeit (Total Blocking Time, TBT) zu reduzieren, und durch Proxy-FID. Zu diesen Optimierungen gehören:

  • Iteration der Lösung zur Codeaufteilung
  • Verbesserte Ausführung von Drittanbieter-Skripts
  • Kontinuierliche Verbesserungen der Asset-Bündelung auf Bundler-Ebene (Webpack).

Mercado Libre hat einen ganzheitlichen Überblick über die Leistung. Während das Unternehmen kontinuierlich die Interaktivität auf der Website optimiert hat, sucht es auch nach Verbesserungsmöglichkeiten für die anderen beiden aktuellen Core Web Vitals: LCP (Largest Contentful Paint) und CLS (Cumulative Layout Shift).