Lær at implementere React lazy loading med komponent-kodesplitting for markant at forbedre applikationens ydeevne, brugeroplevelse og indledende indlæsningstider.
React Lazy Loading: Forbedring af ydeevnen med komponent-kodesplitting
I nutidens landskab for webudvikling er ydeevne altafgørende. Brugere forventer hurtige indlæsningstider og gnidningsfri interaktion. Store JavaScript-bundles, især i komplekse React-applikationer, kan have en betydelig negativ indvirkning på de indledende indlæsningstider og den samlede brugeroplevelse. En effektiv teknik til at imødegå dette er lazy loading, specifikt kodesplitting af komponenter. Denne artikel giver en omfattende guide til at forstå og implementere React lazy loading ved hjælp af React.lazy
og Suspense
.
Hvad er Lazy Loading og kodesplitting?
Lazy loading, også kendt som on-demand indlæsning, er en teknik, der udsætter indlæsningen af ressourcer (i vores tilfælde React-komponenter), indtil de rent faktisk er nødvendige. I stedet for at indlæse al applikationens kode på forhånd, indlæses kun de essentielle dele i starten, og den resterende kode indlæses asynkront, når brugeren navigerer til en bestemt rute eller interagerer med en bestemt komponent. Dette reducerer den indledende bundlestørrelse markant og forbedrer time to interactive (TTI).
Kodesplitting er processen, hvor man opdeler sin applikations kode i mindre, mere håndterbare bidder (bundles). Disse bundles kan derefter indlæses uafhængigt og on-demand. React lazy loading udnytter kodesplitting til kun at indlæse komponenter, når de er påkrævet.
Fordele ved Lazy Loading og kodesplitting
- Forbedret indledende indlæsningstid: Ved at reducere den indledende bundlestørrelse downloader og parser browseren mindre JavaScript på forhånd, hvilket resulterer i hurtigere sideindlæsningstider. Dette er især afgørende for brugere på langsommere netværksforbindelser eller enheder.
- Forbedret brugeroplevelse: Hurtigere indlæsningstider fører til en mere responsiv og behagelig brugeroplevelse, hvilket reducerer afvisningsprocenten og øger brugerengagementet.
- Reduceret ressourceforbrug: At indlæse kun den nødvendige kode reducerer applikationens hukommelsesforbrug, hvilket især er en fordel for mobile enheder.
- Bedre SEO: Søgemaskiner favoriserer websteder med hurtige indlæsningstider, hvilket potentielt kan forbedre dit websteds placering i søgemaskinerne.
Implementering af React Lazy Loading med React.lazy
og Suspense
React tilbyder en indbygget mekanisme til lazy loading af komponenter ved hjælp af React.lazy
og Suspense
. React.lazy
giver dig mulighed for dynamisk at importere en komponent, mens Suspense
giver en måde at vise en fallback-brugergrænseflade, mens komponenten indlæses.
Trin 1: Dynamiske imports med React.lazy
React.lazy
tager en funktion, der kalder import()
. Funktionen import()
er en dynamisk import, der returnerer et Promise, som resolver til et modul, der indeholder den komponent, du vil lazy loade.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
I dette eksempel bliver MyComponent
ikke indlæst, før den bliver renderet. Udsagnet import('./MyComponent')
importerer dynamisk komponenten fra filen ./MyComponent
. Bemærk, at stien er relativ til den aktuelle fil.
Trin 2: Brug af Suspense
til at håndtere indlæsningstilstande
Da lazy loading indebærer asynkron indlæsning af komponenter, har du brug for en måde at håndtere indlæsningstilstanden på og vise en fallback-brugergrænseflade, mens komponenten hentes. Det er her, Suspense
kommer ind i billedet. Suspense
er en React-komponent, der lader dig "udsætte" renderingen af dens børn, indtil de er klar. Den tager en fallback
-prop, som specificerer den brugergrænseflade, der skal renderes, mens børnene indlæses.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Indlæser...
I dette eksempel ombryder Suspense
-komponenten MyComponent
. Mens MyComponent
indlæses, vil fallback
-proppen (
) blive renderet. Når MyComponent
er indlæst, vil den erstatte fallback-brugergrænsefladen.
Eksempel: Lazy Loading af en rute i en React Router-applikation
Lazy loading er især nyttigt for ruter i en React Router-applikation. Du kan lazy loade hele sider eller sektioner af din applikation, hvilket forbedrer den indledende indlæsningstid for dit websted.
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 (
Indlæser...