Tanulja meg, hogyan implementálhatja a React lazy loadingot a komponensek kĂłdfelosztásával az alkalmazás teljesĂtmĂ©nyĂ©nek, a felhasználĂłi Ă©lmĂ©nynek Ă©s a kezdeti betöltĂ©si idĹ‘knek a drasztikus javĂtása Ă©rdekĂ©ben.
React Lazy Loading: TeljesĂtmĂ©nynövelĂ©s a komponensek kĂłdfelosztásával
A mai webfejlesztĂ©si környezetben a teljesĂtmĂ©ny kulcsfontosságĂş. A felhasználĂłk gyors betöltĂ©si idĹ‘ket Ă©s zökkenĹ‘mentes interakciĂłkat várnak el. A nagy JavaScript csomagok, kĂĽlönösen az összetett React alkalmazásokban, jelentĹ‘sen befolyásolhatják a kezdeti betöltĂ©si idĹ‘t Ă©s az általános felhasználĂłi Ă©lmĂ©nyt. Ennek kezelĂ©sĂ©re egy hatĂ©kony technika a lazy loading (lusta betöltĂ©s), pontosabban a komponensek kĂłdfelosztása. Ez a cikk átfogĂł ĂştmutatĂłt nyĂşjt a React lazy loading megĂ©rtĂ©sĂ©hez Ă©s implementálásához a React.lazy
és a Suspense
segĂtsĂ©gĂ©vel.
Mi az a Lazy Loading és a kódfelosztás?
A lazy loading, más nĂ©ven igĂ©ny szerinti betöltĂ©s (on-demand loading), egy olyan technika, amely kĂ©slelteti az erĹ‘források (esetĂĽnkben a React komponensek) betöltĂ©sĂ©t, amĂg azokra tĂ©nylegesen szĂĽksĂ©g nincs. Ahelyett, hogy az alkalmazás teljes kĂłdját elĹ‘re betöltenĂ©nk, kezdetben csak a legfontosabb rĂ©szek töltĹ‘dnek be, a fennmaradĂł kĂłd pedig aszinkron mĂłdon töltĹ‘dik be, amikor a felhasználĂł egy adott Ăştvonalra navigál vagy egy adott komponenssel interakciĂłba lĂ©p. Ez jelentĹ‘sen csökkenti a kezdeti csomagmĂ©retet Ă©s javĂtja az interaktivitásig eltelt idĹ‘t (TTI - time to interactive).
A kódfelosztás (code splitting) az a folyamat, amely során az alkalmazás kódját kisebb, jobban kezelhető darabokra (csomagokra) osztjuk. Ezeket a csomagokat aztán függetlenül és igény szerint lehet betölteni. A React lazy loading a kódfelosztást használja ki a komponensek csak akkor történő betöltésére, amikor azok szükségesek.
A Lazy Loading és a kódfelosztás előnyei
- Jobb kezdeti betöltési idő: A kezdeti csomagméret csökkentésével a böngésző kevesebb JavaScriptet tölt le és értelmez előre, ami gyorsabb oldalbetöltési időt eredményez. Ez különösen fontos a lassabb hálózati kapcsolattal vagy eszközökkel rendelkező felhasználók számára.
- Fokozott felhasználĂłi Ă©lmĂ©ny: A gyorsabb betöltĂ©si idĹ‘k reszponzĂvabb Ă©s Ă©lvezetesebb felhasználĂłi Ă©lmĂ©nyt nyĂşjtanak, csökkentve a visszafordulási arányt Ă©s növelve a felhasználĂłi elkötelezĹ‘dĂ©st.
- Csökkentett erőforrás-felhasználás: Csak a szükséges kód betöltése csökkenti az alkalmazás memóriaigényét, ami különösen előnyös a mobil eszközökön.
- Jobb SEO: A keresĹ‘motorok elĹ‘nyben rĂ©szesĂtik a gyors betöltĂ©si idejű weboldalakat, ami potenciálisan javĂthatja weboldala keresĹ‘motor-rangsorolását.
A React Lazy Loading implementálása a React.lazy
és a Suspense
segĂtsĂ©gĂ©vel
A React beĂ©pĂtett mechanizmust biztosĂt a komponensek lusta betöltĂ©sĂ©re a React.lazy
és a Suspense
használatával. A React.lazy
lehetĹ‘vĂ© teszi egy komponens dinamikus importálását, mĂg a Suspense
lehetĹ‘sĂ©get ad egy tartalĂ©k (fallback) felhasználĂłi felĂĽlet megjelenĂtĂ©sĂ©re, amĂg a komponens betöltĹ‘dik.
1. lépés: Dinamikus importálás a React.lazy
-vel
A React.lazy
egy olyan fĂĽggvĂ©nyt kap paramĂ©terkĂ©nt, amely meghĂvja az import()
-ot. Az import()
fĂĽggvĂ©ny egy dinamikus import, amely egy Promise-t ad vissza, ami egy modullal oldĂłdik fel, amely tartalmazza a lustán betölteni kĂvánt komponenst.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
Ebben a példában a MyComponent
csak akkor töltődik be, amikor renderelésre kerül. Az import('./MyComponent')
utasĂtás dinamikusan importálja a komponenst a ./MyComponent
fájlbĂłl. Vegye figyelembe, hogy az Ăştvonal az aktuális fájlhoz kĂ©pest relatĂv.
2. lépés: A Suspense
használata a betöltési állapotok kezelésére
Mivel a lazy loading a komponensek aszinkron betöltĂ©sĂ©vel jár, szĂĽksĂ©ge van egy mĂłdszerre a betöltĂ©si állapot kezelĂ©sĂ©re Ă©s egy tartalĂ©k UI megjelenĂtĂ©sĂ©re, amĂg a komponenst lekĂ©ri a rendszer. Itt jön kĂ©pbe a Suspense
. A Suspense
egy React komponens, amely lehetĹ‘vĂ© teszi, hogy „felfĂĽggessze” a gyermekeinek renderelĂ©sĂ©t, amĂg azok kĂ©szen nem állnak. Egy fallback
propot kap, amely meghatározza a gyermekek betöltĂ©se közben megjelenĂtendĹ‘ UI-t.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Betöltés...
Ebben a példában a Suspense
komponens körbeveszi a MyComponent
-et. AmĂg a MyComponent
töltődik, a fallback
prop (
) lesz renderelve. Amint a MyComponent
betöltődött, lecseréli a tartalék UI-t.
Példa: Útvonal lusta betöltése egy React Router alkalmazásban
A lazy loading kĂĽlönösen hasznos egy React Router alkalmazás Ăştvonalaihoz. Lustán betölthet egĂ©sz oldalakat vagy az alkalmazás rĂ©szeit, javĂtva ezzel webhelye kezdeti betöltĂ©si idejĂ©t.
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 (
Betöltés...