Išsamus Reagento kodo skaidymo vadovas naudojant maršrutais pagrįstą paketo padalijimą, didinantį programos našumą ir naudotojo patirtį. Išmokite metodų, geriausios praktikos ir praktinio įgyvendinimo strategijų.
Reagento kodo skaidymas: Maršrutais pagrįstas paketo padalijimas optimizuotam našumui
Šiandieninėje žiniatinklio kūrimo aplinkoje greita ir reaguojanti naudotojo patirtis yra svarbiausia. Naudotojai tikisi greito pasitenkinimo, o lėtai įkeliančios programos gali sukelti nusivylimą ir atsisakymą. Vienas galingas būdas pagerinti jūsų Reagento programų našumą yra kodo skaidymas. Šiame straipsnyje nagrinėjami maršrutais pagrįsto kodo skaidymo ypatumai - strategija, kuri padalija jūsų programą į mažesnius, valdomus paketus, įkeliant tik einamam maršrutui reikalingą kodą.
Kodo skaidymo supratimas
Kodo skaidymas yra programos kodo padalijimas į kelis paketus, kuriuos galima įkelti pagal poreikį arba lygiagrečiai. Padaliję kodą, galite žymiai sumažinti pradinį programos įkėlimo laiką, nes naršyklei reikia atsisiųsti tik pradiniam vaizdui atvaizduoti reikalingą kodą.
Vietoj to, kad būtų pateikiamas vienas didelis JavaScript failas, kodo skaidymas leidžia jį suskaidyti į mažesnes dalis, dažnai susijusias su konkrečiomis funkcijomis arba maršrutais jūsų programoje. Šis požiūris siūlo keletą pagrindinių pranašumų:
- Sumažintas pradinis įkėlimo laikas: Naršyklė atsisiunčia mažesnį pradinį paketą, todėl pagreitėja pirmasis atvaizdavimas ir pagerėja naudotojo suvokimas.
- Pagerintas našumas: Mažesni paketai reiškia mažiau kodo, kurį reikia analizuoti ir vykdyti, todėl programa veikia jautriau.
- Pagerinta naudotojo patirtis: Naudotojai gali pradėti sąveikauti su programa anksčiau, nes kritinis kodas įkeliamas greitai.
- Efektyvus išteklių panaudojimas: Kiekvienam maršrutui įkeliamas tik reikalingas kodas, sumažinant pralaidumą ir gerinant išteklių panaudojimą.
Maršrutais pagrįstas kodo skaidymas: Strateginis požiūris
Maršrutais pagrįstas kodo skaidymas orientuojasi į programos padalijimą pagal skirtingus maršrutus ar puslapius. Tai ypač veiksminga strategija vieno puslapio programoms (SPA), kai visa programa įkeliama iš pradžių, bet tik dalis jos iš tikrųjų matoma bet kuriuo metu.
Naudojant maršrutais pagrįstą kodo skaidymą, kiekvienas maršrutas arba susijusių maršrutų grupė tampa atskiru paketu. Kai naudotojas pereina į konkretų maršrutą, atitinkamas paketas įkeliamas pagal poreikį. Tai užtikrina, kad naudotojai atsisiųstų tik einamam vaizdui reikalingą kodą, sumažindami pradinį įkėlimo laiką ir gerindami bendrą našumą.
Įgyvendinimo metodai: Dinaminiai importai ir React.lazy
Reagento pateikia puikias priemones ir API, skirtas įgyvendinti maršrutais pagrįstą kodo skaidymą, visų pirma per dinaminius importus ir React.lazy komponentą.
Dinaminiai importai
Dinaminiai importai yra JavaScript funkcija, leidžianti sinchroniškai įkelti modulius. Skirtingai nuo statinių importų (pvz., import Component from './Component'
), dinaminiai importai naudoja import()
funkciją, kuri grąžina pažadą. Šis pažadas išsprendžiamas su modulio eksportu, kai modulis įkeliamas.
Tai leidžia įkelti komponentus pagal poreikį.
Pavyzdys:
const MyComponent = React.lazy(() => import('./MyComponent'));
Šiame pavyzdyje MyComponent
bus įkeltas tik tada, kai jo prireiks, pvz., kai jis atvaizduojamas konkrečiame maršrute.
React.lazy
React.lazy
yra integruotas Reagento komponentas, kuris leidžia lengvai tingiai įkelti kitus komponentus. Jis priima funkciją, kuri grąžina pažadą, kuris išsprendžiamas į Reagento komponentą. Tai paprastai naudojama kartu su dinaminiais importais.
Norėdami naudoti React.lazy
, turite apvynioti tingiai įkeltą komponentą su <Suspense>
komponentu. <Suspense>
komponentas leidžia rodyti atsarginę vartotojo sąsają (pvz., įkėlimo suktuką), kol komponentas įkeliamas.
Pavyzdys:
import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));
const Contact = lazy(() => import('./routes/Contact'));
function App() {
return (
Loading...
Šiame pavyzdyje Home
, About
ir Contact
komponentai tingiai įkeliami, kai pasiekiami atitinkami maršrutai. <Suspense>
komponentas rodo "Loading...", kol komponentai įkeliami.
Praktiniai įgyvendinimo žingsniai
Štai žingsnis po žingsnio vadovas, kaip įgyvendinti maršrutais pagrįstą kodo skaidymą jūsų Reagento programoje:
- Nustatykite maršrutus: Nustatykite maršrutus savo programoje, kuriuos galima padalyti į atskirus paketus. Apsvarstykite galimybę sugrupuoti susijusius maršrutus į vieną paketą, kad padidintumėte efektyvumą.
- Sukurkite maršruto komponentus: Sukurkite Reagento komponentus kiekvienam maršrutui arba maršrutų grupei. Šie komponentai bus tingiai įkeliami naudojant dinaminius importus ir
React.lazy
. - Įgyvendinkite tingų įkėlimą: Naudokite
React.lazy
ir dinaminius importus, kad sinchroniškai įkeltumėte maršruto komponentus. Apvyniokite kiekvieną tingiai įkeltą komponentą su<Suspense>
komponentu, kad įkėlimo metu pateiktumėte atsarginę vartotojo sąsają. - Konfigūruokite maršruto parinkimą: Naudokite maršruto parinkimo biblioteką, pvz.,
react-router-dom
, kad apibrėžtumėte maršrutus ir susietumėte juos su tingiai įkeliamais komponentais. - Kruopščiai išbandykite: Kruopščiai išbandykite savo programą, kad įsitikintumėte, jog kodo skaidymas veikia tinkamai ir kad tingiai įkeliami komponentai įkeliami taip, kaip tikėtasi.
- Optimizuokite paketo dydį: Išanalizuokite paketų dydį ir nustatykite galimybes sumažinti jų dydį. Apsvarstykite galimybę naudoti tokius įrankius kaip Webpack Bundle Analyzer, kad vizualizuotumėte savo paketo turinį ir nustatytumėte dideles priklausomybes.
Pažangūs metodai ir svarstymai
Nors pagrindinis maršrutais pagrįsto kodo skaidymo įgyvendinimas yra gana paprastas, yra keletas pažangių metodų ir svarstymų, kurie gali dar labiau pagerinti jūsų programos našumą ir naudotojo patirtį.
Išankstinis įkėlimas
Išankstinis įkėlimas apima išteklių (pvz., paketų) įkėlimą prieš tai, kai jų iš tikrųjų reikia. Tai gali būti naudinga siekiant pagerinti suvokiamą programos našumą, nes naudotojai gali nepastebėti jokio įkėlimo vėlavimo, kai pereina į naują maršrutą.
Galite įgyvendinti išankstinį įkėlimą naudodami įvairius metodus, pvz.:
<link rel="prefetch">
: Ši HTML žyma nurodo naršyklei atsisiųsti nurodytą išteklių fone.react-router-dom
's<Link>
komponentas: Galite naudotiprefetch
savybę, kad iš anksto įkeltumėte su konkrečia nuoroda susijusius išteklius.- Pasirinktinė išankstinio įkėlimo logika: Galite įgyvendinti savo išankstinio įkėlimo logiką naudodami JavaScript ir
import()
funkciją.
Pavyzdys naudojant react-router-dom
's <Link>
:
import { Link } from 'react-router-dom';
function Nav() {
return (
);
}
Serverio pusės atvaizdavimas (SSR) ir kodo skaidymas
Serverio pusės atvaizdavimo (SSR) sujungimas su kodo skaidymu gali dar labiau pagerinti jūsų programos našumą, ypač pradiniam įkėlimo laikui. SSR leidžia atvaizduoti pradinį HTML serveryje, kuris vėliau gali būti išsiųstas klientui. Tai sumažina JavaScript kiekį, kurį reikia atsisiųsti ir vykdyti kliente, todėl pagreitėja pirmasis atvaizdavimas.
Naudojant SSR su kodo skaidymu, svarbu užtikrinti, kad serveris taip pat galėtų apdoroti dinaminius importus ir React.lazy
. Tokios sistemos kaip Next.js ir Gatsby teikia integruotą SSR ir kodo skaidymo palaikymą, todėl lengviau įgyvendinti šiuos metodus.
Klaidų tvarkymas
Naudojant tingų įkėlimą, svarbu tvarkyti galimas klaidas, kurios gali atsirasti įkėlimo proceso metu. Pavyzdžiui, gali būti nutrauktas tinklo ryšys arba serveris gali būti nepasiekiamas.
Galite naudoti <ErrorBoundary>
komponentą, kad sugautumėte klaidas, atsirandančias tingiai įkeliamų komponentų atvaizdavimo metu. <ErrorBoundary>
komponentas leidžia rodyti atsarginę vartotojo sąsają klaidos atveju.
Pavyzdys:
import React, { Suspense, lazy } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function ErrorFallback() {
return (
Oops! Something went wrong.
);
}
function MyErrorBoundary(props) {
return (
}>
{props.children}
);
}
function App() {
return (
Loading...