Trendyol senkte den INP um 50 % und konnte so die Klickrate um 1% steigern

Diese Fallstudie beschreibt einen Schritt-für-Schritt-Workflow zur Fehlerbehebung und Verbesserung von INP. in React verwendet von Trendyol unter Nutzung von Google-Tools wie PageSpeed Insights (PSI), Chrome-Entwicklertools und die scheduler.yield API.

Zwei wichtige Komponenten jeder E-Commerce-Website sind die Seite mit Produktinformationen. und die Produktdetailseite (Product Detail Page, PDP). E-Commerce-Zugriffe stammen oft Seiten mit Produkteinträgen, sei es über E-Mail-Kampagnen, soziale Medien oder Werbung. Daher ist es wichtig, dass das PLP-Erlebnis das so konzipiert ist, dass Käufe schneller abgeschlossen werden. Priorisierung Die Qualität der Nutzererfahrung ist entscheidend für den Erfolg. Forschungspublikationen Milliseconds Make Millions haben bereits deutlich gemacht, wie sich die Webleistung auf die die Bereitschaft, Geld auszugeben und mit Marken online.

Trendyol ist eine E-Commerce-Plattform mit etwa 30 Millionen Kunden. mit 240.000 Verkäufern, wodurch wir das erste Unternehmen in der Türkei sind. mit einem Wert von über 10 Milliarden $. auf der ganzen Welt.

Um das Ziel zu erreichen, in großem Maßstab die bestmögliche User Experience zu bieten während die Inhalte flexibel bleiben und eine ältere Version des Trendyol konzentrierte sich auf Interaction to Next Paint (INP) als wichtigen Messwert, verbessern können. Diese Fallstudie beschreibt den Weg von Trendyol zur Verbesserung der INP bei seinen Dies führte zu einer Senkung von 50% beim INP und einer Steigerung der Suchanfragen um 1% bei der Geschäftsergebnis.

Das INP-Untersuchungsverfahren von Trendyol

INP misst die Reaktionsfähigkeit einer Website auf Nutzereingaben. Ein guter INP weist darauf hin, dass der Browser schnell und zuverlässig auf alle Nutzereingaben das Überarbeiten der Seite, was ein wesentlicher Bestandteil einer guten User Experience ist.

Die Entwicklung von Trendyol zur Verbesserung von INP begann mit einer gründlichen Analyse der die User Experience, bevor Verbesserungen vorgenommen werden. Basierend auf einem PSI-Bericht betrug die tatsächliche Nutzererfahrung mit dem PLP 963 Millisekunden Mobilgerät, wie in der nächsten Abbildung dargestellt.

<ph type="x-smartling-placeholder">
</ph> INP von Trendyol laut CrUX-Wert in PageSpeed Insights. Der INP von Trendyol lag am 5. September 2023 bei 963 Millisekunden. Dieser Wert liegt im „schlechten“ Bereich. <ph type="x-smartling-placeholder">
</ph> Der INP von Trendyol, Stand 5. September 2023, von PSI.

Um eine gute Reaktionsfähigkeit zu gewährleisten, sollten Websiteinhaber einen INP-Wert unter oder 200 Millisekunden, was bedeutet, dass der INP-Wert von Trendyol zu dieser Zeit im „schlecht“ Bereich.

Glücklicherweise stellt PSI beide Felddaten für Seiten bereit, die im Bericht Chrome-Nutzer Bericht zur Nutzererfahrung und detaillierte Diagnosedaten aus dem Lab. Blick auf das Labor aus der JavaScript-Ausführungszeit in Lighthouse, ergab, search-result-v2-Skript hat den Hauptthread länger beschäftigt als andere Skripte auf der Seite.

<ph type="x-smartling-placeholder">
</ph> Eine Zusammenfassung der Quellen langer Aufgaben in Lighthouse für die Trendyol-Website. Eine wichtige Quelle für lange Aufgaben ist ein Skript, das Suchergebnisse auf dem PLP von Trendyol verarbeitet. <ph type="x-smartling-placeholder">
</ph> Lighthouse-Audit für die JavaScript-Ausführungszeit von Trendyol (Stand: September) 5. September 2023 von PSI.

Um Engpässe in der realen Welt zu identifizieren, haben wir das Steuerfeld „Leistung“ in Chrome verwendet. Entwicklertools, um Probleme mit PLP-Problemen zu beheben und die Quelle des Problem. In den Chrome-Entwicklertools wird die Leistung auf Mobilgeräten durch eine um das 4-fache Verlangsamung der CPU emuliert eine 700 bis 900 Millisekunden lange Aufgabe im Hauptthread aufgedeckt. Wenn die wichtigsten Thread länger als 50 Millisekunden mit anderen Aufgaben belegt ist, nicht zeitnah auf Nutzereingaben reagieren können, was zu einer schlechten User Experience aus.

<ph type="x-smartling-placeholder">
</ph> Screenshot einer Sitzung mit Leistungsprofilen in den Chrome-Entwicklertools für PLP von Trendyol. Die dargestellte lange Aufgabe dauert 737, 6 Millisekunden und ist Teil eines Intersection Observer-Callbacks. <ph type="x-smartling-placeholder">
</ph> Ein Performance-Profiler, der lange Aufgaben mit dem PLP von Trendyol in der Leistung bearbeitet in den Chrome-Entwicklertools.

Die längste Aufgabe wurde durch einen Intersection Observer API-Callback im Suchergebnisskript in einer React-Komponente. An dieser Stelle begannen wir, diese lange Aufgabe in kleine Blöcke zerlegen, um dem Browser mehr Möglichkeiten, auf Aufgaben mit höherer Priorität zu reagieren – einschließlich Nutzerinteraktionen.

Es stellt sich heraus, dass die Verwendung des setState-Vorgangs, der React auslöst, Das erneute Rendern innerhalb des Intersection Observer-Callbacks ist mit hohen Kosten verbunden, die für Low-End-Geräte problematisch sein können, da sie den Hauptthread zu lang.

Eine Methode, die Entwickelnde verwendet haben, um Aufgaben in kleinere Aufgaben aufzuteilen beinhaltet setTimeout. Mit dieser Technik haben wir die Ausführung der setState-Aufruf in eine separate Aufgabe. Obwohl setTimeout ein Aufschieben erlaubt, JavaScript ausführen, gibt es keine Kontrolle über die Priorität. Dies führte Teilnahme am Ursprungstest in scheduler.yield, um den Fortsetzung der Skriptausführung nach dem Aufrufen des Hauptthreads:

/*
* Yielding method using scheduler.yield, falling back to setTimeout:
*/
async function yieldToMain() {
  if('scheduler' in window && 'yield' in scheduler) {
    return await scheduler.yield();
  }

  return new Promise(resolve => {
    setTimeout(resolve, 0);
  });
}

/*
* Yielding to the main thread before changing the state of the component:
*/
const observer = new IntersectionObserver((entries) => {
  entries.forEach(handleIntersection);
  const maxNumberOfEntries = Math.max(...this.intersectingEntries);

  if (Number.isFinite(maxNumberOfEntries)) {
    await this.yieldToMain();

    this.setState({ count: maxNumberOfEntries });
  }
}, { threshold: 0.5 });

Das Hinzufügen dieser Ertragsmethode zum PLP-Code führte zu einem verbesserten INP, da das wurde in mehrere kleinere Aufgaben aufgeteilt, Arbeiten mit höherer Priorität – z. B. Nutzungsinteraktionen und Rendering-Arbeiten –, um schneller als sonst stattfinden.

<ph type="x-smartling-placeholder">
</ph> Screenshot einer Sitzung mit Leistungsprofilen in den Chrome-Entwicklertools für PLP von Trendyol. Die lange Aufgabe, die zuvor 737,6 Millisekunden lief, ist nun in mehrere kleinere Aufgaben aufgeteilt. <ph type="x-smartling-placeholder">
</ph> Die Aufgabe ist in kleinere Aufgaben aufgeteilt.

Trendyol verwendet das PuzzleJs-Framework, um ein Mikro-Frontend zu implementieren. Architektur mit React v16.9.0. Mit React 18 könnte dieselbe Leistung aber aus verschiedenen Gründen ist Trendyol in diesem Fall nicht in der Lage, .

Geschäftsergebnisse

Um die Auswirkungen der implementierten INP-Verbesserung zu messen, führten wir einen A/B-Test durch, wie sich dies auf die Geschäftsmetriken ausgewirkt hat. Insgesamt führten unsere Änderungen am PLP zu zu einer deutlichen Verbesserung führte, darunter eine Senkung der INP um 50 % und eine Anstieg der Klickraten von der Seite mit den Einträgen zur Produktdetailseite pro Nutzersitzung. In der folgenden Abbildung sehen Sie, wie sich INP im Vergleich zu PLP im Zeitverlauf:

<ph type="x-smartling-placeholder">
</ph> Screenshot des INP für das 75. Perzentil von Trendyol über einen Zeitraum von sechs Monaten Am Ende der sechs Monate sank der INP-Wert von Trendyol auf fast 650 Millisekunden von fast 1.400 Millisekunden. <ph type="x-smartling-placeholder">
</ph> INP-Verbesserungen für das 75. Perzentil im Laufe der Zeit.

Fazit

Die Optimierung von INP ist ein komplexer und iterativer Prozess, kann aber auch einfacher mit einem klaren Workflow. Eine einfache Methode zur Fehlerbehebung und Verbesserung wie hoch der INP-Wert einer Website ist, hängt davon ab, ob Sie Ihre eigenen Felddaten erheben. Wenn Sie PSI und Lighthouse sind ein guter Ausgangspunkt. Sobald Sie die Seiten mit Problemen suchen, können Sie mit den Entwicklertools versuchen, Probleme.

Hin und wieder dem Hauptthread nachgeben, um dem Browser mehr Informationen zu geben für dringende Aufgaben wird Ihre Website reaktionsschneller, damit Ihre Kundschaft eine bessere User Experience bietet. Neuere Planungs-APIs wie scheduler.yield() diese Aufgabe erleichtern.

Ein besonderer Dank geht an Jeremy Wagner, Barry Pollard und Houssein Djirdeh aus Google und des Engineering-Teams von Trendyol für ihren Beitrag zu dieser Arbeit.