Optymalizacja konta Mercado Libre pod kątem wskaźników internetowych (TBT/FID)

Optymalizacja interakcji na stronach z informacjami o produkcie, która pozwoliła zmniejszyć maksymalny potencjalny FID w Lighthouse o 90% i poprawić FID w Raporcie na temat użytkowania Chrome o 9%.

Carlos Aranha
Carlos Aranha
Joan Baca
Joan Baca

Mercado Libre to największy ekosystem e-commerce i płatności w Ameryce Łacińskiej. Aplikacja jest dostępna w 18 krajach i jest liderem na rynku w Brazylii, Meksyku i Argentynie (na podstawie liczby unikalnych użytkowników i wyświetleń stron).

Skuteczność witryny od dawna była ważnym tematem dla tej firmy, ale niedawno utworzono zespół, który ma monitorować skuteczność i stosować optymalizacje w różnych częściach witryny.

W tym artykule podsumowaliśmy działania podjęte przez Guille Paz, Pablo CarminattiOleh Burkhay z zespołu ds. architektury front-endu w Mercado Libre, aby zoptymalizować jeden z podstawowych wskaźników internetowych: czas opóźnienia przy pierwszym działaniu (FID) i jego odpowiednik w laboratorium, całkowity czas blokowania (TBT).

90%

Zmniejszenie maksymalnego potencjalnego opóźnienia pierwszej reakcji w Lighthouse

9%

Więcej użytkowników, którzy w raporcie CrUX oceniają FID jako „Szybki”

Długie zadania, opóźnienie przy pierwszym działaniu i łączny czas blokowania

Wykonywanie wymagającego kodu JavaScript może prowadzić do długich zadań, czyli takich, które trwają w głównym wątku przeglądarki dłużej niż 50 ms.

FID (opóźnienie przy pierwszym działaniu) mierzy czas, jaki upływa od pierwszej interakcji użytkownika ze stroną (np. kliknięcia linku) do chwili, w której przeglądarka może rozpocząć przetwarzanie obsługi zdarzeń w odpowiedzi na tę interakcję. Witryna, która wykonuje kosztowny kod JavaScriptu, będzie prawdopodobnie zawierać kilka długich zadań, które negatywnie wpłyną na FID.

Aby wygodnie korzystać z witryny, użytkownicy powinni mieć opóźnienie pierwszego wejścia poniżej 100 milisekund: Dobre wartości fid to 2,5 sekundy, złe wartości to więcej niż 4,0 sekundy, a wszystko pomiędzy wymaga poprawy

Chociaż witryna Mercado Libre działała dobrze w większości sekcji, firma dowiedziała się z raportu na temat użytkowania Chrome, że strony z informacjami o produktach mają niską wartość FID. Na podstawie tych informacji zespół postanowił skupić się na zwiększeniu interaktywności stron produktów w witrynie.

Wersje strony ze szczegółami produktu Mercado Libre na urządzenia mobilne i komputery.
Wersje na urządzenia mobilne i komputery strony ze szczegółami produktu na Mercado Libre.

Te strony umożliwiają użytkownikom wykonywanie złożonych interakcji, więc celem było zoptymalizowanie interakcji bez wpływu na ważne funkcje.

Pomiar interakcji na stronach ze szczegółami produktów

FID wymaga udziału rzeczywistego użytkownika, dlatego nie można go mierzyć w laboratorium. Dane Total Blocking Time (TBT) można jednak mierzyć w laboratorium, dobrze korelują z danymi FID w warunkach rzeczywistych i pokazują też problemy wpływające na interaktywność.

W tym przykładowym śladzie łączny czas wykonywania zadań w wątku głównym wynosi 560 ms, ale tylko 345 ms jest uważane za łączny czas blokowania (suma części każdego zadania, która przekracza 50 ms):

Oś czasu zadań w wątku głównym z wyświetlonym czasem blokowania

W laboratorium firma Mercado Libre używała TBT jako wskaźnika zastępczego, aby mierzyć i ulepszać interaktywność stron ze szczegółami produktów w rzeczywistych warunkach.

Oto ogólne podejście:

Wizualizowanie długich zadań za pomocą WebPageTest

WebPageTest (WPT) to narzędzie do pomiaru wydajności stron internetowych, które umożliwia przeprowadzanie testów na rzeczywistych urządzeniach w różnych lokalizacjach na całym świecie.

Mercado Libre wykorzystało WPT do odtworzenia wrażeń użytkowników, wybierając typ urządzenia i lokalizację podobne do tych, które mają prawdziwi użytkownicy. W szczególności wybrali telefon Moto 4G i lokalizację Dulles w stanie Wirginia, ponieważ chcieli uzyskać wyniki zbliżone do tych, które uzyskują użytkownicy Mercado Libre w Meksyk. Obserwując widok wątku głównego w WPT, Mercado Libre zauważyło, że kilka kolejnych długich zadań blokowało wątek główny przez 2 sekundy:

Widok głównego wątku na stronach produktów Mercado Libre.
Widok głównego wątku na stronach ze szczegółami produktów na Mercado Libre.

Podczas analizowania odpowiedniego kaskady okazało się, że znaczna część tych 2 sekund pochodziła z modułu analitycznego. Główny pakiet aplikacji był duży (950 KB) i potrzebował dużo czasu na przeanalizowanie, skompilowanie i wykonanie.

Widok strony ze szczegółowymi informacjami o produktach w formie kaskady.
Widok strony ze szczegółami produktu w Mercado Libre w formie kaskady

Korzystanie z narzędzia Lighthouse do określania maksymalnego potencjalnego opóźnienia pierwszej reakcji

Lighthouse nie pozwala na wybór różnych urządzeń i lokalizacji, ale jest bardzo przydatnym narzędziem do diagnozowania witryn i otrzymywania rekomendacji dotyczących wydajności.

Po uruchomieniu Lighthouse na stronach ze szczegółami produktów firma Mercado Libre odkryła, że Maksymalny potencjalny FID był jedyną miarą oznaczoną na czerwono, a jego wartość wynosiła 1710 ms.

Dane Lighthouse w raporcie PSI dotyczącym stron ze szczegółami produktów na Mercado Libre

Na tej podstawie firma Mercado Libre wyznaczyła sobie cel poprawy maksymalnego możliwego wyniku FID w narzędziu laboratoryjnym, takim jak Lighthouse czy WebPageTest, zakładając, że te ulepszenia wpłyną na ich rzeczywistych użytkowników i będą widoczne w narzędziach do monitorowania rzeczywistych użytkowników, takich jak raport na temat użytkowania Chrome.

Optymalizacja długich zadań

Pierwsza iteracja

Na podstawie śledzenia wątku głównego Mercado Libre wyznaczyło sobie cel polegający na optymalizacji 2 modułów, które wykonywały drogi kod.

Zaczęli optymalizować skuteczność wewnętrznego modułu śledzenia. Ten moduł zawierał zadanie obciążające procesor, które nie było niezbędne do działania modułu, więc można je było bezpiecznie usunąć. W efekcie objętość kodu JavaScript w całej witrynie zmniejszyła się o 2%.

Następnie zaczęli pracować nad zwiększeniem ogólnego rozmiaru pakietu:

Firma Mercado Libre użyła narzędzia webpack-bundle-analyzer do wykrycia możliwości optymalizacji:

  • Początkowo wymagały one pełnego modułu Lodash. Zostało ono zastąpione przez require per-method, aby wczytywać tylko podzbiór biblioteki Lodash zamiast całej biblioteki. Używaliśmy go w połączeniu z lodash-webpack-plugin, aby jeszcze bardziej zmniejszyć rozmiar Lodash.

Zastosowano też te optymalizacje Babel:

W efekcie rozmiar pakietu zmniejszył się o około 16%.

Pomiar wpływu

Zmiany te skróciły czas wykonywania kolejnych długich zadań w przypadku Mercado Libre z 2 sekund do 1 sekundy:

Widok głównego wątku na stronach produktów Mercado Libre po pierwszej rundzie optymalizacji.
W górnej części waterfalla WPT między 3. a 5. sekundą znajduje się długi czerwony pasek (w kolumnie Strona jest interaktywna). W dolnej części osi czasu pasek został podzielony na mniejsze części, które zajmują główny wątek przez krótsze okresy czasu.

Lighthouse wykazał o 57% mniejsze maksymalne potencjalne opóźnienie przy pierwszym działaniu:

Dane Lighthouse w raporcie PSI dotyczącym stron z informacjami o produktach na stronie Mercado Libre po pierwszej rundzie optymalizacji

Druga iteracja

Zespół kontynuował analizę długich zadań, aby znaleźć kolejne możliwości ulepszenia.

Szczegółowy widok głównego wątku na stronach z informacjami o produktach na Mercado Libre po pierwszej rundzie optymalizacji.
Waterfall (nie pokazany na ilustracji) pomógł firmie Mercado Libre zidentyfikować biblioteki, które intensywnie korzystały z głównego wątku (wiersz Główny wątek przeglądarki), a wiersz Strona jest interaktywna wyraźnie pokazuje, że ta aktywność głównego wątku blokuje interaktywność.

Na podstawie tych informacji zdecydowaliśmy się wprowadzić następujące zmiany:

  • Kontynuuj zmniejszanie rozmiaru głównego pakietu, aby zoptymalizować czas kompilacji i analizowania (np. przez usuwanie podwójnych zależności w różnych modułach).
  • Zastosuj dzielenie kodu na poziomie komponentu, aby podzielić kod JavaScript na mniejsze fragmenty i umożliwić inteligentniejsze wczytywanie różnych komponentów.
  • Odłóż nawilżanie komponentów, aby umożliwić bardziej efektywne wykorzystanie głównego wątku. Ta technika jest powszechnie nazywana częściowym nawilżaniem.

Pomiar wpływu

Wynikający z tego ślad WebPageTest zawierał jeszcze mniejsze fragmenty wykonywania kodu JS:

Widok głównego wątku na stronach z informacjami o produktach w Mercado Libre po drugim etapie optymalizacji.

Maksymalne potencjalne opóźnienie pierwszej reakcji (FID) w Lighthouse zostało zmniejszone o dodatkowe 60%:

Dane Lighthouse w raporcie PSI dotyczącym stron z informacjami o produktach na stronie Mercado Libre po pierwszej rundzie optymalizacji

Wizualizacja postępów rzeczywistych użytkowników

Narzędzia do testowania laboratoryjnego, takie jak WebPageTest i Lighthouse, są bardzo przydatne do iteracji rozwiązań podczas procesu tworzenia, ale prawdziwym celem jest poprawa wrażeń użytkowników.

Raport na temat użytkowania Chrome zawiera dane, które dotyczą wygody korzystania i pokazują, jak działają miejsca docelowe w sieci z perspektywy prawdziwych użytkowników Chrome. Dane z raportu możesz uzyskać, wydając zapytania w BigQuery, PageSpeedInsights lub interfejsie API Chrome UX Report.

Panel Crux to prosty sposób na wizualizację postępów w przypadku najważniejszych danych:

.
Postęp Mercado Libre w przypadku FID w okresie od stycznia do kwietnia 2020 r. Przed projektem optymalizacji 82% użytkowników uważało, że FID jest szybki (poniżej 100 ms). Po zmianach ponad 91% użytkowników uznało, że dane są wyświetlane szybko.

Dalsze kroki

Wydajność witryny to proces, który nigdy się nie kończy, a firma Mercado Libre rozumie, jak korzystne dla użytkowników są te optymalizacje. Chociaż w dalszym ciągu wprowadzają różne optymalizacje w witrynie, w tym prefetching na stronach z informacjami o produktach, optymalizację obrazów i inne, stale wprowadzają też ulepszenia na stronach z informacjami o produktach, aby jeszcze bardziej skrócić łączny czas blokowania (TBT) i wskaźnik FID. Te optymalizacje obejmują:

  • Iterowanie rozwiązania polegającego na dzieleniu kodu.
  • Ulepszenie wykonywania skryptów innych firm.
  • Ciągłe ulepszanie grupowania zasobów na poziomie pakietu (webpack).

Mercado Libre ma całościowy wgląd w wydajność, więc podczas optymalizowania interakcji w witrynie firma zaczęła też oceniać możliwości poprawy pozostałych 2 podstawowych wskaźników internetowych: LCP (największe wyrenderowanie treści)CLS (skumulowane przesunięcie układu).