Lietuvių

Pagerinkite savo React aplikacijų pradinį įkrovimo laiką ir našumą naudodami „lazy loading“ ir komponentų kodo išskaidymą. Išmokite praktinių metodų ir geriausių praktikų.

React „Lazy Loading“: Komponentų Kodo Išskaidymas Optimizuotam Našumui

Šiuolaikiniame sparčiame skaitmeniniame pasaulyje svetainės našumas yra svarbiausias. Vartotojai tikisi greito rezultato, o lėtas įkrovimo laikas gali sukelti nusivylimą, apleistus pirkinių krepšelius ir neigiamą prekės ženklo įvaizdį. React aplikacijoms našumo optimizavimas yra labai svarbus siekiant užtikrinti sklandžią ir patrauklią vartotojo patirtį. Viena galinga technika tai pasiekti yra „lazy loading“ (atidėtas įkėlimas) su komponentų kodo išskaidymu.

Kas yra „Lazy Loading“ ir Kodo Išskaidymas?

„Lazy loading“ (atidėtas įkėlimas) yra technika, kai resursai, tokie kaip paveikslėliai, scenarijai ir komponentai, yra įkeliami tik tada, kai jų prireikia, o ne visi iš karto per pradinį puslapio įkrovimą. Tai žymiai sumažina duomenų, kuriuos reikia atsisiųsti ir apdoroti iš anksto, kiekį, todėl pradinis įkrovimo laikas sutrumpėja, o suvokiamas našumas pagerėja.

Kodo išskaidymas yra procesas, kurio metu jūsų aplikacijos kodas padalijamas į mažesnes, lengviau valdomas dalis (arba paketus). Tai leidžia naršyklei atsisiųsti tik pradiniam vaizdui reikalingą kodą, atidedant kito kodo įkėlimą, kol jo iš tikrųjų prireiks. „Lazy loading“ naudoja kodo išskaidymą, kad įkeltų konkrečius komponentus tik tada, kai jie bus atvaizduojami.

Kodėl Naudoti „Lazy Loading“ ir Kodo Išskaidymą React Aplikacijose?

Štai kodėl turėtumėte apsvarstyti „lazy loading“ ir kodo išskaidymo integravimą į savo React projektus:

Kaip Įdiegti „Lazy Loading“ React Aplikacijoje

React turi integruotą „lazy loading“ palaikymą naudojant React.lazy ir Suspense komponentus. Štai žingsnis po žingsnio vadovas:

1. Naudojant React.lazy()

React.lazy() leidžia dinamiškai importuoti komponentus, efektyviai išskaidant jūsų kodą į atskiras dalis. Ji priima funkciją, kuri kviečia import(), grąžinantį „Promise“, kuris išsisprendžia į komponentą.


const MyComponent = React.lazy(() => import('./MyComponent'));

Šiame pavyzdyje MyComponent bus įkeltas tik tada, kai jis bus atvaizduojamas.

2. Apgaubimas su <Suspense>

Kadangi React.lazy() naudoja dinamiškus importus, kurie yra asinchroniški, jums reikia apgaubti atidėtai įkeliamą komponentą <Suspense> komponentu. <Suspense> komponentas leidžia jums rodyti atsarginę vartotojo sąsają (pvz., įkrovimo indikatorių), kol komponentas yra įkeliamas.


import React, { Suspense } from 'react';

function MyPage() {
  return (
    Kraunama...
}> ); }

Šiame pavyzdyje pranešimas Kraunama... bus rodomas, kol MyComponent bus įkeliamas. Kai komponentas bus įkeltas, jis pakeis atsarginę vartotojo sąsają.

3. Praktinis Pavyzdys: Didelės Paveikslėlių Galerijos Atidėtas Įkėlimas

Apsvarstykime scenarijų, kai turite didelę paveikslėlių galeriją. Visų paveikslėlių įkėlimas vienu metu gali smarkiai paveikti našumą. Štai kaip galite atidėtai įkelti paveikslėlius naudodami React.lazy() ir <Suspense>:


import React, { Suspense } from 'react';

const LazyImage = React.lazy(() => import('./Image'));

function ImageGallery() {
  const images = [
    { id: 1, src: 'image1.jpg', alt: 'Paveikslėlis 1' },
    { id: 2, src: 'image2.jpg', alt: 'Paveikslėlis 2' },
    { id: 3, src: 'image3.jpg', alt: 'Paveikslėlis 3' },
    // ... daugiau paveikslėlių
  ];

  return (
    
{images.map(image => ( Kraunamas paveikslėlis...
}> ))} ); } export default ImageGallery;

Ir Image.js komponentas:


import React from 'react';

const Image = ({ src, alt }) => {
  return {alt};
};

export default Image;

Šiame pavyzdyje kiekvienas paveikslėlis yra apgaubtas <Suspense> komponentu, todėl kiekvienam paveikslėliui bus rodomas įkrovimo pranešimas, kol jis bus įkeliamas. Tai neleidžia blokuoti viso puslapio, kol paveikslėliai yra atsiunčiami.

Pažangesnės Technikos ir Svarstymai

1. Klaidų Ribos (Error Boundaries)

Naudojant „lazy loading“, svarbu tvarkyti galimas klaidas, kurios gali įvykti įkrovimo proceso metu. Klaidų ribos (Error Boundaries) gali būti naudojamos šioms klaidoms pagauti ir parodyti atsarginę vartotojo sąsają. Galite sukurti klaidų ribos komponentą taip:


import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // Atnaujinkite būseną, kad kitas atvaizdavimas parodytų atsarginę UI.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Taip pat galite registruoti klaidą klaidų pranešimo tarnyboje
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Galite atvaizduoti bet kokią pasirinktinę atsarginę UI
      return 

Kažkas nutiko negerai.

; } return this.props.children; } } export default ErrorBoundary;

Tada apgaubkite <Suspense> komponentą su <ErrorBoundary>:



  Kraunama...}>
    
  


Jei įvyksta klaida kraunant MyComponent, <ErrorBoundary> ją pagaus ir parodys atsarginę vartotojo sąsają.

2. Serverio Pusės Atvaizdavimas (SSR) ir „Lazy Loading“

„Lazy loading“ taip pat galima naudoti kartu su serverio pusės atvaizdavimu (SSR), siekiant pagerinti pradinį jūsų aplikacijos įkrovimo laiką. Tačiau tam reikalinga papildoma konfigūracija. Reikia užtikrinti, kad serveris teisingai tvarkytų dinaminius importus ir kad atidėtai įkeliami komponentai būtų tinkamai „hidratuoti“ kliento pusėje.

Įrankiai, tokie kaip Next.js ir Gatsby.js, siūlo integruotą palaikymą „lazy loading“ ir kodo išskaidymui SSR aplinkose, todėl procesas tampa daug paprastesnis.

3. Atidėtai Įkeliamų Komponentų Išankstinis Įkėlimas

Kai kuriais atvejais galite norėti iš anksto įkelti atidėtai įkeliamą komponentą, prieš jam iš tikrųjų prireikiant. Tai gali būti naudinga komponentams, kurie greičiausiai bus greitai atvaizduoti, pavyzdžiui, komponentams, esantiems žemiau matomos ekrano dalies, bet į kuriuos tikėtina, kad bus nuslinkta. Komponentą galite iš anksto įkelti rankiniu būdu iškviesdami import() funkciją:


import('./MyComponent'); // Išankstinis MyComponent įkėlimas

Tai pradės komponento įkėlimą fone, todėl jis bus pasiekiamas greičiau, kai bus faktiškai atvaizduojamas.

4. Dinaminiai Importai su „Webpack Magic Comments“

Webpack „magiškieji komentarai“ suteikia galimybę pritaikyti sugeneruotų kodo dalių pavadinimus. Tai gali būti naudinga derinant ir analizuojant jūsų aplikacijos paketų struktūrą. Pavyzdžiui:


const MyComponent = React.lazy(() => import(/* webpackChunkName: "my-component" */ './MyComponent'));

Tai sukurs kodo dalį pavadinimu „my-component.js“ (ar panašiai) vietoj bendrinio pavadinimo.

5. Kaip Išvengti Dažniausių Klaidų

Realaus Pasaulio Pavyzdžiai ir Panaudojimo Atvejai

„Lazy loading“ gali būti taikomas įvairiems scenarijams, siekiant pagerinti React aplikacijų našumą. Štai keletas pavyzdžių:

Pavyzdys: Tarptautinė elektroninės prekybos svetainė

Įsivaizduokite elektroninės prekybos svetainę, parduodančią produktus visame pasaulyje. Skirtingos šalys gali turėti skirtingas valiutas, kalbas ir produktų katalogus. Užuot iš anksto įkėlus visus duomenis kiekvienai šaliai, galite naudoti „lazy loading“, kad įkeltumėte duomenis, būdingus vartotojo vietai, tik tada, kai jis apsilanko svetainėje.


const CurrencyFormatter = React.lazy(() => import(`./CurrencyFormatter/${userCountry}`))
const ProductCatalog = React.lazy(() => import(`./ProductCatalog/${userCountry}`))

function ECommerceSite() {
  const userCountry = getUserCountry(); // Funkcija, nustatanti vartotojo šalį

  return (
    Kraunamas turinys jūsų regionui...}>
      
      
    
  );
}

Išvada

„Lazy loading“ ir komponentų kodo išskaidymas yra galingos technikos, skirtos optimizuoti React aplikacijų našumą. Įkeldami komponentus tik tada, kai jų prireikia, galite žymiai sutrumpinti pradinį įkrovimo laiką, pagerinti vartotojo patirtį ir sustiprinti savo SEO. React integruoti React.lazy() ir <Suspense> komponentai leidžia lengvai įdiegti „lazy loading“ jūsų projektuose. Pasinaudokite šiomis technikomis, kad sukurtumėte greitesnes, jautresnes ir patrauklesnes interneto aplikacijas pasaulinei auditorijai.

Įgyvendindami „lazy loading“, visada atsižvelkite į vartotojo patirtį. Pateikite informatyvias atsargines vartotojo sąsajas, tinkamai tvarkykite galimas klaidas ir atidžiai analizuokite savo aplikacijos našumą, kad įsitikintumėte, jog pasiekiate norimus rezultatus. Nebijokite eksperimentuoti su skirtingais požiūriais ir rasti geriausią sprendimą pagal savo konkrečius poreikius.