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

Durch die Optimierung der Interaktivität der Produktdetailseiten konnte die maximale potenzielle FID in Lighthouse um 90% reduziert und die FID im Bericht zur Nutzererfahrung in Chrome um 9% verbessert werden.

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. Sie ist in 18 Ländern vertreten und Marktführer in Brasilien, Mexiko und Argentinien (basierend auf einzelnen Besuchern und Seitenaufrufen).

Die Webleistung war schon immer ein Schwerpunkt des Unternehmens. Vor Kurzem hat es jedoch ein Team zusammengestellt, das die Leistung überwacht und Optimierungen an verschiedenen Stellen der Website vornimmt.

In diesem Artikel werden die Arbeiten von Guille Paz, Pablo Carminatti und Oleh Burkhay aus dem Frontend-Architekturteam von Mercado Libre zusammengefasst, die zur Optimierung eines der Core Web Vitals durchgeführt wurden: First Input Delay (FID) und sein Lab-Proxy, Total Blocking Time (TBT).

90 %

Verringerung der maximalen potenziellen ersten Eingabelatenz in Lighthouse

%

Mehr Nutzer bewerten die FID in CrUX als „Schnell“

Lange Aufgaben, First Input Delay und Total Blocking Time

Die Ausführung von ressourcenintensivem JavaScript-Code kann zu langen Aufgaben führen, d. h. zu Aufgaben, die im Haupt-Thread des Browsers länger als 50 ms ausgeführt werden.

Der FID (First Input Delay) gibt an, wie lange es ab dem Zeitpunkt, zu dem ein Nutzer das erste Mal mit einer Seite interagiert, dauert, bis der Browser mit der Verarbeitung von Ereignishandlern als Reaktion auf diese Interaktion beginnt. Eine Website, auf der teurer JavaScript-Code ausgeführt wird, hat wahrscheinlich mehrere lange Aufgaben, was sich negativ auf die FID auswirkt.

Für eine gute Nutzerfreundlichkeit sollten Websites eine First Input Delay von weniger als 100 Millisekunden anstreben: Gute fid-Werte liegen bei 2,5 Sekunden, schlechte Werte über 4,0 Sekunden.Werte dazwischen müssen verbessert werden.

Die Website von Mercado Libre erzielte in den meisten Bereichen eine gute Leistung. Im Chrome User Experience Report wurde jedoch festgestellt, dass die Produktdetailseiten eine schlechte FID hatten. Auf der Grundlage dieser Informationen entschied sich das Team, sich auf die Verbesserung der Interaktivität der Produktseiten auf der Website zu konzentrieren.

Mobile und Desktopversionen einer Mercado Libre-Produktdetailseite
Mobile und Desktopversionen einer Produktdetailseite von Mercado Libre.

Auf diesen Seiten können Nutzer komplexe Interaktionen ausführen. Ziel war es daher, die Interaktivität zu optimieren, ohne wichtige Funktionen zu beeinträchtigen.

Interaktivität von Produktdetailseiten messen

Für die FID ist ein echter Nutzer erforderlich. Sie kann daher nicht im Lab gemessen werden. Der Messwert Total Blocking Time (TBT) kann jedoch im Lab gemessen werden, korreliert gut mit dem FID im Feld und erfasst auch Probleme, die sich auf die Interaktivität auswirken.

Im folgenden Trace beträgt die Gesamtzeit für die Ausführung von Aufgaben im Haupt-Thread beispielsweise 560 ms. Davon werden jedoch nur 345 ms als Gesamtblockierungszeit betrachtet (die Summe der Teile jeder Aufgabe, die 50 ms überschreiten):

Eine Aufgabenzeitachse im Hauptthread mit Blockierungszeit

Mercado Libre nutzte die TBT-Messwerte im Lab, um die Interaktivität von Produktdetailseiten in der Praxis zu messen und zu verbessern.

So ging das Team vor:

Lange Aufgaben mit WebPageTest visualisieren

WebPageTest (WPT) ist ein Web-Leistungstool, mit dem Sie Tests auf echten Geräten an verschiedenen Standorten auf der ganzen Welt ausführen können.

Mercado Libre nutzte WPT, um die Nutzererfahrung zu reproduzieren, indem es einen Gerätetyp und einen Standort auswählte, der den echten Nutzern ähnelte. Konkret entschied er sich für ein Moto 4G-Gerät und Dulles, Virginia, da er die Nutzung von Mercado Libre in Mexiko nachahmen wollte. Bei der Beobachtung der Hauptthreadansicht von WPT stellte Mercado Libre fest, dass mehrere aufeinanderfolgende lange Aufgaben den Hauptthread für zwei Sekunden blockierten:

Hauptthreadansicht der Produktdetailseiten von Mercado Libre.
Hauptthreadansicht der Produktdetailseiten von Mercado Libre.

Bei der Analyse der entsprechenden Vermittlungsabfolge stellte das Team fest, dass ein erheblicher Teil dieser zwei Sekunden auf das Analysemodul zurückzuführen war. Das Hauptbundle der Anwendung war groß (950 KB) und das Parsen, Kompilieren und Ausführen dauerte sehr lange.

Abfolge der Produktdetailseiten
Abfolge der Produktdetailseiten von Mercado Libre.

Mit Lighthouse die maximale potenzielle erste Eingabelatenz ermitteln

Lighthouse bietet keine Möglichkeit, zwischen verschiedenen Geräten und Standorten zu wählen. Es ist jedoch ein sehr nützliches Tool, um Websites zu diagnostizieren und Leistungsempfehlungen zu erhalten.

Bei der Ausführung von Lighthouse auf Produktdetailseiten stellte Mercado Libre fest, dass der Messwert Max. potenzielle FID mit einem Wert von 1.710 ms der einzige Messwert war, der rot markiert war.

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

Ausgehend von diesen Ergebnissen setzte sich Mercado Libre das Ziel, den Wert für die maximale potenzielle FID in einem Labortool wie Lighthouse und WebPageTest zu verbessern. Dabei ging das Unternehmen davon aus, dass sich diese Verbesserungen auf die tatsächlichen Nutzer auswirken und sich daher in Tools zur Überwachung echter Nutzer wie dem Bericht zur Nutzererfahrung in Chrome zeigen würden.

Lange Aufgaben optimieren

Erste Iteration

Basierend auf dem Haupt-Thread-Trace setzte sich Mercado Libre das Ziel, die beiden Module zu optimieren, in denen teurer Code ausgeführt wurde.

Er begann, die Leistung des internen Tracking-Moduls zu optimieren. Dieses Modul enthielt eine CPU-intensive Aufgabe, die für die Funktion des Moduls nicht kritisch war und daher sicher entfernt werden konnte. Das führte zu einer Reduzierung des JavaScript-Codes für die gesamte Website um 2 %.

Danach begannen sie damit, die allgemeine Größe des Bundles zu verbessern:

Mercado Libre nutzte webpack-bundle-analyzer, um Optimierungsmöglichkeiten zu erkennen:

  • Ursprünglich war das vollständige Lodash-Modul erforderlich. Dieser wurde durch ein pro-Methode-Require ersetzt, um nur einen Teil von Lodash anstelle der gesamten Bibliothek zu laden. In Verbindung mit dem lodash-webpack-plugin wurde Lodash so noch weiter verkleinert.

Außerdem wurden die folgenden Babel-Optimierungen angewendet:

Durch diese Optimierungen konnte die Größe des Bundles um etwa 16% reduziert werden.

Wirkung messen

Durch die Änderungen wurde die Zeit für aufeinanderfolgende lange Aufgaben bei Mercado Libre von zwei auf eine Sekunde verkürzt:

Hauptthreadansicht der Produktdetailseiten von Mercado Libre nach der ersten Optimierungsrunde.
In der obersten Abfolge von WPT befindet sich zwischen den Sekunden 3 und 5 eine lange rote Leiste (in der Zeile Die Seite ist interaktiv). In der unteren Abfolge wurde die Leiste in kleinere Teile unterteilt, die den Hauptthread kürzere Zeit belegen.

Lighthouse zeigte eine Reduzierung des maximalen potenziellen First Input Delays um 57%:

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

Zweite Iteration

Das Team hat sich weiterhin mit langen Aufgaben befasst, um weitere Verbesserungen zu finden.

Detailansicht der Hauptspalte der Produktdetailseiten von Mercado Libre nach der ersten Optimierungsrunde.
Anhand der abgebildeten Ablaufliste konnte Mercado Libre ermitteln, welche Bibliotheken den Hauptthread stark beanspruchten (Zeile Browser Main Thread). Die Zeile Page is Interactive zeigt deutlich, dass diese Hauptthread-Aktivität die Interaktivität blockiert.

Auf der Grundlage dieser Informationen hat das Team beschlossen, die folgenden Änderungen vorzunehmen:

  • Reduzieren Sie die Größe des Haupt-Bundles weiter, um die Kompilierungs- und Parsezeit zu optimieren (z.B. durch Entfernen doppelter Abhängigkeiten in den verschiedenen Modulen).
  • Verwenden Sie die Codeaufteilung auf Komponentenebene, um JavaScript in kleinere Codeblöcke zu unterteilen und das intelligentere Laden der verschiedenen Komponenten zu ermöglichen.
  • Verschieben Sie die Komponentenhydrierung, um den Hauptthread effizienter zu nutzen. Diese Methode wird allgemein als partielle Hydrierung bezeichnet.

Wirkung messen

Der daraus resultierende WebPageTest-Trace zeigte noch kleinere JS-Ausführungsblöcke:

Hauptthreadansicht der Produktdetailseiten von Mercado Libre nach der zweiten Optimierungsrunde

Die Zeit für die maximale potenzielle erste Eingabelatenz in Lighthouse wurde um weitere 60% reduziert:

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 hervorragend, um während der Entwicklung Lösungen zu iterieren. Das eigentliche Ziel besteht jedoch darin, die Nutzerfreundlichkeit für echte Nutzer zu verbessern.

Der Bericht zur Nutzererfahrung in Chrome enthält Messwerte dazu, wie echte Chrome-Nutzer beliebte Ziele im Web erleben. Die Daten aus dem Bericht können durch Abfragen in BigQuery, PageSpeedInsights oder die CrUX API abgerufen werden.

Im CrUX-Dashboard können Sie den Fortschritt der wichtigsten Messwerte auf einfache Weise visualisieren:

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

Nächste Schritte

Die Webleistung ist nie abgeschlossen und Mercado Libre weiß, welchen Mehrwert diese Optimierungen für die Nutzer haben. Neben mehreren Optimierungen auf der gesamten Website, darunter prefetching auf Produktseite und Bildoptimierungen, werden auch weiterhin Verbesserungen an Produktseiten vorgenommen, um die Gesamtblockierungszeit (Total Blocking Time, TBT) und damit auch die FID weiter zu reduzieren. Zu diesen Optimierungen gehören:

  • Iterationen zur Code-Split-Lösung
  • Die Ausführung von Drittanbieter-Scripts wurde verbessert.
  • Weitere Verbesserungen beim Asset-Bündeln auf Bundler-Ebene (webpack).

Mercado Libre hat einen ganzheitlichen Blick auf die Leistung. Während das Unternehmen die Interaktivität der Website weiter optimiert, hat es auch damit begonnen, Verbesserungsmöglichkeiten für die anderen beiden aktuellen Core Web Vitals zu prüfen: LCP (Largest Contentful Paint) und CLS (Cumulative Layout Shift).