Lær hvordan du implementerer React 'lazy loading' med komponent-kodesplitting for å drastisk forbedre applikasjonsytelse, brukeropplevelse og innlastingstid.
React Lazy Loading: Forbedre Ytelsen med Komponent-kodesplitting
I dagens landskap for webutvikling er ytelse avgjørende. Brukere forventer raske lastetider og smidige interaksjoner. Store JavaScript-pakker, spesielt i komplekse React-applikasjoner, kan betydelig påvirke den innledende lastetiden og den generelle brukeropplevelsen. En kraftig teknikk for å løse dette er lazy loading, spesifikt kodesplitting av komponenter. Denne artikkelen gir en omfattende guide til å forstå og implementere React 'lazy loading' ved hjelp av React.lazy
og Suspense
.
Hva er Lazy Loading og Kodesplitting?
Lazy loading, også kjent som 'on-demand loading' (lasting ved behov), er en teknikk som utsetter lasting av ressurser (i vårt tilfelle, React-komponenter) til de faktisk trengs. I stedet for å laste all applikasjonskoden på forhånd, lastes kun de essensielle delene innledningsvis, og den gjenværende koden lastes asynkront når brukeren navigerer til en bestemt rute eller interagerer med en spesifikk komponent. Dette reduserer den innledende pakkestørrelsen betydelig og forbedrer tiden til interaktivitet (TTI).
Kodesplitting er prosessen med å dele applikasjonens kode inn i mindre, mer håndterbare biter (pakker). Disse pakkene kan deretter lastes uavhengig og ved behov. React 'lazy loading' utnytter kodesplitting for å laste komponenter kun når de er nødvendige.
Fordeler med Lazy Loading og Kodesplitting
- Forbedret Innlastingstid: Ved å redusere den innledende pakkestørrelsen, laster nettleseren ned og parser mindre JavaScript i starten, noe som resulterer i raskere sidelasting. Dette er spesielt viktig for brukere på tregere nettverk eller enheter.
- Forbedret Brukeropplevelse: Raskere lastetider fører til en mer responsiv og behagelig brukeropplevelse, noe som reduserer fluktfrekvensen og øker brukerengasjementet.
- Redusert Ressursbruk: Ved å kun laste den nødvendige koden reduseres applikasjonens minnebruk, noe som er spesielt gunstig for mobile enheter.
- Bedre SEO: Søkemotorer foretrekker nettsteder med raske lastetider, noe som potensielt kan forbedre nettstedets rangering i søkeresultatene.
Implementering av React Lazy Loading med React.lazy
og Suspense
React tilbyr en innebygd mekanisme for 'lazy loading' av komponenter ved hjelp av React.lazy
og Suspense
. React.lazy
lar deg dynamisk importere en komponent, mens Suspense
gir en måte å vise et reserve-UI (fallback) mens komponenten lastes.
Steg 1: Dynamiske Importer med React.lazy
React.lazy
tar en funksjon som kaller import()
. Funksjonen import()
er en dynamisk import som returnerer et Promise, som løses til en modul som inneholder komponenten du vil 'lazy loade'.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
I dette eksempelet blir MyComponent
ikke lastet før den blir rendret. Uttrykket import('./MyComponent')
importerer komponenten dynamisk fra filen ./MyComponent
. Legg merke til at filstien er relativ til den nåværende filen.
Steg 2: Bruke Suspense
for å Håndtere Lastetilstander
Siden 'lazy loading' innebærer asynkron lasting av komponenter, trenger du en måte å håndtere lastetilstanden på og vise et reserve-UI mens komponenten hentes. Det er her Suspense
kommer inn. Suspense
er en React-komponent som lar deg "utsette" (suspend) renderingen av sine underordnede komponenter til de er klare. Den tar en fallback
-prop, som spesifiserer UI-et som skal rendres mens de underordnede komponentene lastes.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Laster...
I dette eksempelet omslutter Suspense
-komponenten MyComponent
. Mens MyComponent
lastes, vil fallback
-propen (
) bli rendret. Når MyComponent
er ferdig lastet, vil den erstatte reserve-UI-et.
Eksempel: Lazy Loading av en Rute i en React Router-applikasjon
'Lazy loading' er spesielt nyttig for ruter i en React Router-applikasjon. Du kan 'lazy loade' hele sider eller seksjoner av applikasjonen din, og dermed forbedre den innledende lastetiden for nettstedet ditt.
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 (
Laster...