Naučte se implementovat React lazy loading s code splittingem komponent pro výrazné zlepšení výkonu, uživatelského zážitku a rychlosti načítání aplikace.
React Lazy Loading: Zvýšení výkonu pomocí Code Splittingu komponent
V dnešním světě webového vývoje je výkon klíčový. Uživatelé očekávají rychlé načítání a plynulé interakce. Velké balíčky JavaScriptu, zejména v komplexních React aplikacích, mohou výrazně ovlivnit počáteční dobu načítání a celkový uživatelský zážitek. Jednou z mocných technik, jak tento problém řešit, je lazy loading, konkrétně code splitting komponent. Tento článek poskytuje komplexního průvodce pro pochopení a implementaci lazy loadingu v Reactu pomocí React.lazy
a Suspense
.
Co je Lazy Loading a Code Splitting?
Lazy loading, známý také jako načítání na vyžádání, je technika, která odkládá načítání zdrojů (v našem případě React komponent) do doby, než jsou skutečně potřeba. Místo načtení veškerého kódu aplikace najednou se na začátku načtou pouze nezbytné části a zbývající kód se načítá asynchronně, když uživatel přejde na konkrétní routu nebo interaguje s určitou komponentou. To výrazně snižuje počáteční velikost balíčku a zlepšuje dobu interaktivity (time to interactive - TTI).
Code splitting je proces rozdělení kódu vaší aplikace na menší, lépe spravovatelné části (balíčky). Tyto balíčky lze pak načítat nezávisle a na vyžádání. React lazy loading využívá code splitting k načítání komponent pouze tehdy, když jsou vyžadovány.
Výhody Lazy Loadingu a Code Splittingu
- Zlepšení počáteční doby načítání: Snížením počáteční velikosti balíčku stahuje a parsuje prohlížeč méně JavaScriptu předem, což vede k rychlejšímu načítání stránky. To je obzvláště důležité pro uživatele na pomalejších síťových připojeních nebo zařízeních.
- Lepší uživatelský zážitek: Rychlejší načítání vede k responzivnějšímu a příjemnějšímu uživatelskému zážitku, snižuje míru okamžitého opuštění a zvyšuje zapojení uživatelů.
- Snížená spotřeba zdrojů: Načítání pouze nezbytného kódu snižuje paměťovou náročnost aplikace, což je výhodné zejména pro mobilní zařízení.
- Lepší SEO: Vyhledávače upřednostňují webové stránky s rychlým načítáním, což může potenciálně zlepšit hodnocení vašeho webu ve vyhledávačích.
Implementace React Lazy Loadingu s React.lazy
a Suspense
React poskytuje vestavěný mechanismus pro lazy loading komponent pomocí React.lazy
a Suspense
. React.lazy
umožňuje dynamicky importovat komponentu, zatímco Suspense
poskytuje způsob, jak zobrazit záložní UI (fallback UI), zatímco se komponenta načítá.
Krok 1: Dynamické importy s React.lazy
React.lazy
přijímá funkci, která volá import()
. Funkce import()
je dynamický import, který vrací Promise, jež se resolvuje na modul obsahující komponentu, kterou chcete načíst pomocí lazy loadingu.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
V tomto příkladu se MyComponent
nenačte, dokud není vykreslena. Příkaz import('./MyComponent')
dynamicky importuje komponentu ze souboru ./MyComponent
. Všimněte si, že cesta je relativní k aktuálnímu souboru.
Krok 2: Použití Suspense
pro zpracování stavů načítání
Protože lazy loading zahrnuje asynchronní načítání komponent, potřebujete způsob, jak zpracovat stav načítání a zobrazit záložní UI, zatímco se komponenta stahuje. K tomu slouží Suspense
. Suspense
je React komponenta, která vám umožňuje „pozastavit“ vykreslování svých potomků, dokud nejsou připraveni. Přijímá prop fallback
, která specifikuje UI, jež se má vykreslit, zatímco se potomci načítají.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Načítání...
V tomto příkladu komponenta Suspense
obaluje MyComponent
. Zatímco se MyComponent
načítá, bude vykreslen obsah propu fallback
(
). Jakmile je MyComponent
načtena, nahradí záložní UI.
Příklad: Lazy Loading routy v aplikaci s React Routerem
Lazy loading je obzvláště užitečný pro routy v aplikaci s React Routerem. Můžete takto načítat celé stránky nebo sekce vaší aplikace, což zlepší počáteční dobu načítání vašeho webu.
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 (
Načítání...