Lazy loading w React: komponenty, trasy i obrazy

Lazy loading w React

Lazy loading w React: lazy, Suspense, trasy i obrazy | We.Inc

Ładuj komponenty React leniwie przez lazy() i Suspense, dziel trasy w React Router, odkładaj obrazy z loading="lazy" i nie spowalniaj głównego obrazu. Demo na żywo w środku.

Lazy loading w React oznacza pobieranie kodu lub obrazów dopiero wtedy, gdy są potrzebne. Opakuj dynamiczny import w lazy(), wyrenderuj komponent wewnątrz granicy Suspense z fallbackiem, a React pobierze go przy pierwszym renderze. W przypadku obrazów to samo robi atrybut HTML loading="lazy", ale nigdy nie stosuj go do głównego obrazu widocznego bez przewijania.

Które narzędzie lazy loadingu pasuje do którego zadania

Duży bundle aplikacji każe każdemu odwiedzającemu czekać na kod, którego może nigdy nie użyć, na przykład wykres na karcie ustawień czy panel administracyjny. Lazy loading dzieli ten kod na osobne pliki, które przeglądarka pobiera na żądanie. Wypróbuj demo poniżej, a potem skopiuj wzorce dla komponentów, tras, obrazów i treści ładowanych przy przewijaniu.

Najczęściej zadawane pytania

Co zwraca React.lazy?

Komponent, który możesz wyrenderować. Jego funkcja ładująca musi zwracać Promise, który rozwiązuje się do obiektu, którego właściwość default jest prawidłowym komponentem React, a dokładnie to daje dynamiczny import() eksportu domyślnego.

Czy lazy() ładuje kod więcej niż raz?

Nie. react.dev podaje, że zarówno zwrócony Promise, jak i jego rozwiązana wartość są buforowane, więc React nie wywołuje funkcji ładującej więcej niż raz. Demo na tej stronie pokazuje, że drugie otwarcie następuje natychmiast.

Czy mogę leniwie załadować eksport nazwany?

lazy() oczekuje eksportu domyślnego. Dla nazwanego zmapuj go w funkcji ładującej: lazy(() => import("./Charts").then((m) => ({ default: m.SalesChart }))).

Czy lazy loading może spowolnić stronę?

Tak, w przypadku największego obrazu na ekranie. web.dev ustaliło, że leniwe ładowanie obrazów widocznych bez przewijania zwykle spowalniało Largest Contentful Paint, a leniwe ładowanie wyłącznie obrazów poniżej pierwszego ekranu zachowywało oszczędność danych bez tego kosztu.

Co się stanie, jeśli leniwy plik nie zdoła się pobrać?

React rzuca przyczynę odrzucenia podczas renderu, a najbliższy error boundary ją przechwytuje. Bez niego, według react.dev, React domyślnie usuwa interfejs aplikacji z ekranu.

Leniwe obrazy a największe wyrenderowanie

Kiedy sobie odpuścić

Leniwe ładowanie komponentu

Standardowy wzorzec: jedna deklaracja lazy na górze pliku i granica Suspense wokół miejsca, gdzie komponent się renderuje.

lazy() z Suspense i error boundary

Plik wykresu nie jest pobierany, dopóki showChart po raz pierwszy nie zmieni się na true.

Leniwe ładowanie tras w React Router

Obiekty tras w React Router przyjmują funkcję lazy, która zwraca właściwości trasy, więc każda strona staje się osobnym plikiem.

Podział według tras z createBrowserRouter

Strona raportów i jej loader pobierają się dopiero, gdy ktoś odwiedzi /reports.

Leniwe ładowanie obrazów

Przeglądarki obsługują leniwe ładowanie obrazów natywnie. Oznacz obrazy poniżej pierwszego ekranu jako lazy, a głównemu obrazowi nadaj wysoki priorytet pobierania.

Natywne leniwe obrazy

Szerokość i wysokość rezerwują miejsce, więc nic się nie przesuwa, gdy obraz się pojawi.

Renderowanie przy przewijaniu z IntersectionObserver

Dla treści, która nie jest obrazem, na przykład mapy lub widżetu opinii, mały hook informuje Cię, kiedy jej obszar wchodzi na ekran.

Hook useInView

rootMargin równy 200px zaczyna ładowanie chwilę przed tym, jak obszar stanie się widoczny, a po pierwszym wyświetleniu observer się odłącza.

Wypróbuj: leniwy komponent z wolnym pobieraniem

Ten przycisk renderuje komponent utworzony przez lazy(). Za pierwszym razem jego pobieranie jest symulowane i trwa 2 sekundy.

Pokaż wykres sprzedaży

Ukryj wykres sprzedaży

Ładowanie pliku wykresu...

Plik wykresu załadowany. Ukryj go i pokaż ponownie: pojawi się od razu, bo React zbuforował pierwsze ładowanie.

Sprzedaż według miesięcy

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony