Dowiedz si臋, jak wdro偶y膰 React lazy loading z dzieleniem kodu komponent贸w, aby drastycznie poprawi膰 wydajno艣膰 aplikacji, do艣wiadczenie u偶ytkownika i czas 艂adowania.
React Lazy Loading: Zwi臋kszanie wydajno艣ci dzi臋ki dzieleniu kodu komponent贸w
W dzisiejszym 艣wiecie tworzenia stron internetowych wydajno艣膰 jest najwa偶niejsza. U偶ytkownicy oczekuj膮 szybkich czas贸w 艂adowania i p艂ynnych interakcji. Du偶e paczki JavaScript, szczeg贸lnie w z艂o偶onych aplikacjach React, mog膮 znacznie wp艂ywa膰 na pocz膮tkowy czas 艂adowania i og贸lne do艣wiadczenie u偶ytkownika. Jedn膮 z pot臋偶nych technik radzenia sobie z tym problemem jest leniwe 艂adowanie (lazy loading), a w szczeg贸lno艣ci dzielenie kodu na poziomie komponent贸w. Ten artyku艂 stanowi kompleksowy przewodnik po zrozumieniu i wdro偶eniu leniwego 艂adowania w React przy u偶yciu React.lazy
i Suspense
.
Czym jest Lazy Loading i Code Splitting?
Leniwe 艂adowanie (lazy loading), znane r贸wnie偶 jako 艂adowanie na 偶膮danie, to technika, kt贸ra op贸藕nia 艂adowanie zasob贸w (w naszym przypadku komponent贸w React) do momentu, gdy s膮 one faktycznie potrzebne. Zamiast 艂adowa膰 ca艂y kod aplikacji na starcie, pocz膮tkowo 艂adowane s膮 tylko niezb臋dne cz臋艣ci, a reszta kodu jest 艂adowana asynchronicznie, gdy u偶ytkownik przechodzi do okre艣lonej trasy lub wchodzi w interakcj臋 z konkretnym komponentem. Znacz膮co zmniejsza to pocz膮tkowy rozmiar paczki i poprawia czas do interaktywno艣ci (TTI).
Dzielenie kodu (code splitting) to proces podzia艂u kodu aplikacji na mniejsze, 艂atwiejsze do zarz膮dzania fragmenty (paczki). Te paczki mog膮 by膰 nast臋pnie 艂adowane niezale偶nie i na 偶膮danie. Leniwe 艂adowanie w React wykorzystuje dzielenie kodu do 艂adowania komponent贸w tylko wtedy, gdy s膮 one wymagane.
Korzy艣ci z Lazy Loading i Code Splitting
- Poprawiony pocz膮tkowy czas 艂adowania: Dzi臋ki zmniejszeniu pocz膮tkowego rozmiaru paczki, przegl膮darka pobiera i przetwarza mniej kodu JavaScript na starcie, co skutkuje szybszym czasem 艂adowania strony. Jest to szczeg贸lnie wa偶ne dla u偶ytkownik贸w z wolniejszymi po艂膮czeniami sieciowymi lub urz膮dzeniami.
- Lepsze do艣wiadczenie u偶ytkownika: Szybsze czasy 艂adowania prowadz膮 do bardziej responsywnego i przyjemnego do艣wiadczenia u偶ytkownika, zmniejszaj膮c wsp贸艂czynnik odrzuce艅 i zwi臋kszaj膮c zaanga偶owanie.
- Zmniejszone zu偶ycie zasob贸w: 艁adowanie tylko niezb臋dnego kodu zmniejsza zu偶ycie pami臋ci przez aplikacj臋, co jest szczeg贸lnie korzystne dla urz膮dze艅 mobilnych.
- Lepsze SEO: Wyszukiwarki internetowe faworyzuj膮 strony z szybkimi czasami 艂adowania, co potencjalnie mo偶e poprawi膰 pozycj臋 Twojej strony w wynikach wyszukiwania.
Implementacja React Lazy Loading z React.lazy
i Suspense
React dostarcza wbudowany mechanizm do leniwego 艂adowania komponent贸w przy u偶yciu React.lazy
i Suspense
. React.lazy
pozwala na dynamiczne importowanie komponentu, podczas gdy Suspense
umo偶liwia wy艣wietlanie interfejsu zast臋pczego (fallback UI) podczas 艂adowania komponentu.
Krok 1: Dynamiczne importy z React.lazy
React.lazy
przyjmuje funkcj臋, kt贸ra wywo艂uje import()
. Funkcja import()
to dynamiczny import, kt贸ry zwraca obietnic臋 (Promise), kt贸ra po rozwi膮zaniu dostarcza modu艂 zawieraj膮cy komponent, kt贸ry chcesz leniwie za艂adowa膰.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
W tym przyk艂adzie MyComponent
nie jest 艂adowany, dop贸ki nie zostanie wyrenderowany. Instrukcja import('./MyComponent')
dynamicznie importuje komponent z pliku ./MyComponent
. Zauwa偶, 偶e 艣cie偶ka jest wzgl臋dna w stosunku do bie偶膮cego pliku.
Krok 2: U偶ycie Suspense
do obs艂ugi stan贸w 艂adowania
Poniewa偶 leniwe 艂adowanie wi膮偶e si臋 z asynchronicznym 艂adowaniem komponent贸w, potrzebujesz sposobu na obs艂ug臋 stanu 艂adowania i wy艣wietlanie interfejsu zast臋pczego, podczas gdy komponent jest pobierany. Tu w艂a艣nie wkracza Suspense
. Suspense
to komponent React, kt贸ry pozwala "zawiesi膰" renderowanie swoich dzieci, dop贸ki nie b臋d膮 gotowe. Przyjmuje on prop fallback
, kt贸ry okre艣la interfejs do wyrenderowania podczas 艂adowania dzieci.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Loading...
W tym przyk艂adzie komponent Suspense
otacza MyComponent
. Podczas gdy MyComponent
si臋 艂aduje, renderowany b臋dzie prop fallback
(
). Gdy MyComponent
zostanie za艂adowany, zast膮pi on interfejs zast臋pczy.
Przyk艂ad: Leniwe 艂adowanie trasy w aplikacji React Router
Leniwe 艂adowanie jest szczeg贸lnie przydatne dla tras w aplikacji opartej na React Router. Mo偶esz leniwie 艂adowa膰 ca艂e strony lub sekcje swojej aplikacji, poprawiaj膮c pocz膮tkowy czas 艂adowania witryny.
import React, { lazy, Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
const Contact = lazy(() => import('./pages/Contact'));
function App() {
return (
Loading...