Latviešu

Atbloķējiet ātrākus sākotnējās ielādes laikus un uzlabotu veiktspēju savām React aplikācijām, izmantojot "lazy loading" un komponentu koda sadalīšanu. Apgūstiet praktiskas metodes un labākās prakses.

React Lazy Loading: Komponentu koda sadalīšana optimizētai veiktspējai

Mūsdienu straujajā digitālajā pasaulē vietnes veiktspēja ir vissvarīgākā. Lietotāji sagaida tūlītēju rezultātu, un lēni ielādes laiki var radīt neapmierinātību, pamestus iepirkumu grozus un negatīvu zīmola tēlu. React aplikācijām veiktspējas optimizēšana ir izšķiroša, lai nodrošinātu plūstošu un saistošu lietotāja pieredzi. Viena spēcīga metode, kā to panākt, ir "lazy loading" jeb slinkā ielāde ar komponentu koda sadalīšanu.

Kas ir "Lazy Loading" un koda sadalīšana?

"Lazy loading" (slinkā ielāde) ir tehnika, kurā resursi, piemēram, attēli, skripti un komponenti, tiek ielādēti tikai tad, kad tie ir nepieciešami, nevis visi uzreiz sākotnējās lapas ielādes laikā. Tas ievērojami samazina datu apjomu, kas ir jālejupielādē un jāapstrādā sākumā, tādējādi nodrošinot ātrākus sākotnējās ielādes laikus un uzlabotu uztverto veiktspēju.

Koda sadalīšana ir process, kurā jūsu aplikācijas kods tiek sadalīts mazākos, vieglāk pārvaldāmos gabalos (jeb pakotnēs). Tas ļauj pārlūkprogrammai lejupielādēt tikai to kodu, kas nepieciešams sākotnējam skatam, atliekot cita koda ielādi līdz brīdim, kad tas patiešām ir nepieciešams. "Lazy loading" izmanto koda sadalīšanu, lai ielādētu konkrētus komponentus tikai tad, kad tie tiks renderēti.

Kāpēc izmantot "Lazy Loading" un koda sadalīšanu React?

Lūk, kāpēc jums vajadzētu apsvērt "lazy loading" un koda sadalīšanas iekļaušanu savos React projektos:

Kā ieviest "Lazy Loading" React?

React nodrošina iebūvētu atbalstu "lazy loading", izmantojot React.lazy un Suspense komponentus. Lūk, soli pa solim ceļvedis:

1. Izmantojot React.lazy()

React.lazy() ļauj dinamiski importēt komponentus, efektīvi sadalot jūsu kodu atsevišķos gabalos. Tā pieņem funkciju, kas izsauc import(), kas atgriež solījumu (Promise), kas atrisinās ar komponentu.


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

Šajā piemērā MyComponent tiks ielādēts tikai tad, kad tas tiks renderēts.

2. Ietīšana ar <Suspense>

Tā kā React.lazy() izmanto dinamiskos importus, kas ir asinhroni, jums ir jāietin "lazy-loaded" komponents ar <Suspense> komponentu. <Suspense> komponents ļauj parādīt rezerves lietotāja saskarni (piemēram, ielādes indikatoru), kamēr komponents tiek ielādēts.


import React, { Suspense } from 'react';

function MyPage() {
  return (
    Ielādē...
}> ); }

Šajā piemērā ziņojums Ielādē... tiks parādīts, kamēr MyComponent tiek ielādēts. Kad komponents būs ielādēts, tas aizstās rezerves UI.

3. Praktisks piemērs: Lielas attēlu galerijas slinkā ielāde

Apskatīsim scenāriju, kurā jums ir liela attēlu galerija. Visu attēlu ielāde vienlaikus var ievērojami ietekmēt veiktspēju. Lūk, kā jūs varat veikt attēlu slinko ielādi, izmantojot React.lazy() un <Suspense>:


import React, { Suspense } from 'react';

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

function ImageGallery() {
  const images = [
    { id: 1, src: 'image1.jpg', alt: '1. attēls' },
    { id: 2, src: 'image2.jpg', alt: '2. attēls' },
    { id: 3, src: 'image3.jpg', alt: '3. attēls' },
    // ... vairāk attēlu
  ];

  return (
    
{images.map(image => ( Ielādē attēlu...
}> ))} ); } export default ImageGallery;

Un Image.js komponents:


import React from 'react';

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

export default Image;

Šajā piemērā katrs attēls ir ietīts <Suspense> komponentā, tāpēc katram attēlam tiks parādīts ielādes ziņojums, kamēr tas tiek ielādēts. Tas novērš visas lapas bloķēšanu, kamēr attēli tiek lejupielādēti.

Padziļinātas metodes un apsvērumi

1. Kļūdu robežas (Error Boundaries)

Izmantojot "lazy loading", ir svarīgi apstrādāt iespējamās kļūdas, kas var rasties ielādes procesā. Kļūdu robežas var izmantot, lai notvertu šīs kļūdas un parādītu rezerves UI. Jūs varat izveidot kļūdu robežas komponentu šādi:


import React, { Component } from 'react';

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

  static getDerivedStateFromError(error) {
    // Atjaunina stāvokli, lai nākamajā renderēšanā parādītu rezerves UI.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Varat arī reģistrēt kļūdu kļūdu ziņošanas servisā
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Varat renderēt jebkādu pielāgotu rezerves UI
      return 

Kaut kas nogāja greizi.

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

Pēc tam ietiniet <Suspense> komponentu ar <ErrorBoundary>:



  Ielādē...}>
    
  


Ja, ielādējot MyComponent, rodas kļūda, <ErrorBoundary> to notvers un parādīs rezerves UI.

2. Servera puses renderēšana (SSR) un "Lazy Loading"

"Lazy loading" var izmantot arī kopā ar servera puses renderēšanu (SSR), lai uzlabotu jūsu aplikācijas sākotnējo ielādes laiku. Tomēr tas prasa papildu konfigurāciju. Jums būs jānodrošina, ka serveris spēj pareizi apstrādāt dinamiskos importus un ka "lazy-loaded" komponenti tiek pareizi hidratēti klienta pusē.

Rīki, piemēram, Next.js un Gatsby.js, nodrošina iebūvētu atbalstu "lazy loading" un koda sadalīšanai SSR vidēs, padarot procesu daudz vieglāku.

3. "Lazy-Loaded" komponentu iepriekšēja ielāde

Dažos gadījumos jūs varat vēlēties iepriekš ielādēt "lazy-loaded" komponentu, pirms tas patiešām ir nepieciešams. Tas var būt noderīgi komponentiem, kas, visticamāk, drīz tiks renderēti, piemēram, komponentiem, kas atrodas zem redzamās lapas daļas, bet, visticamāk, tiks ritināti redzamības zonā. Jūs varat iepriekš ielādēt komponentu, manuāli izsaucot import() funkciju:


import('./MyComponent'); // Iepriekš ielādē MyComponent

Tas sāks ielādēt komponentu fonā, tāpēc tas būs pieejams ātrāk, kad tas tiks faktiski renderēts.

4. Dinamiskie importi ar Webpack "maģiskajiem komentāriem"

Webpack "maģiskie komentāri" nodrošina veidu, kā pielāgot ģenerēto koda gabalu nosaukumus. Tas var būt noderīgi atkļūdošanai un jūsu aplikācijas pakotnes struktūras analīzei. Piemēram:


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

Tas izveidos koda gabalu ar nosaukumu "my-component.js" (vai līdzīgu) vispārēja nosaukuma vietā.

5. Izvairīšanās no biežākajām kļūdām

Reālās pasaules piemēri un lietošanas gadījumi

"Lazy loading" var piemērot dažādiem scenārijiem, lai uzlabotu React aplikāciju veiktspēju. Lūk, daži piemēri:

Piemērs: Starptautiska e-komercijas vietne

Iedomājieties e-komercijas vietni, kas pārdod produktus visā pasaulē. Dažādās valstīs var būt atšķirīgas valūtas, valodas un produktu katalogi. Tā vietā, lai ielādētu visus datus par katru valsti uzreiz, jūs varat izmantot "lazy loading", lai ielādētu datus, kas attiecas tikai uz lietotāja atrašanās vietu, kad viņš apmeklē vietni.


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

function ECommerceSite() {
  const userCountry = getUserCountry(); // Funkcija, lai noteiktu lietotāja valsti

  return (
    Ielādē saturu jūsu reģionam...}>
      
      
    
  );
}

Noslēgums

"Lazy loading" un komponentu koda sadalīšana ir spēcīgas metodes React aplikāciju veiktspējas optimizēšanai. Ielādējot komponentus tikai tad, kad tie ir nepieciešami, jūs varat ievērojami samazināt sākotnējo ielādes laiku, uzlabot lietotāja pieredzi un uzlabot savu SEO. React iebūvētie React.lazy() un <Suspense> komponenti atvieglo "lazy loading" ieviešanu jūsu projektos. Izmantojiet šīs metodes, lai veidotu ātrākas, atsaucīgākas un saistošākas tīmekļa aplikācijas globālai auditorijai.

Atcerieties vienmēr ņemt vērā lietotāja pieredzi, ieviešot "lazy loading". Nodrošiniet informatīvas rezerves lietotāja saskarnes, graciozi apstrādājiet iespējamās kļūdas un rūpīgi analizējiet savas aplikācijas veiktspēju, lai pārliecinātos, ka sasniedzat vēlamos rezultātus. Nebaidieties eksperimentēt ar dažādām pieejām un atrast labāko risinājumu savām specifiskajām vajadzībām.