Optimalisering av React-ytelse: Mestre reduksjon av buntestørrelse | MLOG | MLOG

Hver rute i dette eksempelet laster sin tilhørende komponent på en "lazy" måte, noe som forbedrer den innledende lastetiden til applikasjonen.

2. Tree Shaking

Tree shaking er en teknikk som fjerner død kode fra applikasjonen din. Død kode refererer til kode som aldri faktisk brukes i applikasjonen din, men som likevel er inkludert i bunten. Dette skjer ofte når du importerer hele biblioteker, men bare bruker en liten del av funksjonaliteten deres.

Moderne JavaScript-bundlere som Webpack og Rollup kan automatisk utføre tree shaking. For å sikre at tree shaking fungerer effektivt, er det viktig å bruke ES-moduler (import- og export-syntaks) i stedet for CommonJS (require-syntaks). ES-moduler lar bundleren statisk analysere koden din og bestemme hvilke eksporter som faktisk brukes.

Eksempel:

La oss si at du bruker et verktøybibliotek kalt lodash. I stedet for å importere hele biblioteket:

            import _ from 'lodash';

_.map([1, 2, 3], (n) => n * 2);
            

Importer kun de funksjonene du trenger:

            import map from 'lodash/map';

map([1, 2, 3], (n) => n * 2);
            

Dette sikrer at kun map-funksjonen inkluderes i bunten din, noe som reduserer størrelsen betydelig.

3. Dynamisk import

I likhet med React.lazy(), lar dynamisk import (ved bruk av import()-syntaksen) deg laste moduler ved behov. Dette kan være nyttig for å laste store biblioteker eller komponenter som bare trengs i spesifikke situasjoner.

Eksempel:

            async function handleClick() {
  const module = await import('./MyLargeComponent');
  const MyLargeComponent = module.default;
  // Use MyLargeComponent
}

            

I dette eksempelet vil MyLargeComponent kun bli lastet når handleClick-funksjonen kalles, vanligvis som respons på en brukerhandling.

4. Minifisering og komprimering

Minifisering fjerner unødvendige tegn fra koden din, som mellomrom, kommentarer og ubrukte variabler. Komprimering reduserer størrelsen på koden din ved å bruke algoritmer som finner mønstre og representerer dem mer effektivt.

De fleste moderne byggeverktøy, som Webpack, Parcel og Rollup, har innebygd støtte for minifisering og komprimering. For eksempel bruker Webpack Terser for minifisering og kan konfigureres til å bruke Gzip eller Brotli for komprimering.

Eksempel (Webpack-konfigurasjon):

            const TerserPlugin = require('terser-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
  // ...
  optimization: {
    minimize: true,
    minimizer: [new TerserPlugin()],
  },
  plugins: [
    new CompressionPlugin({
      algorithm: 'gzip',
      test: /\.(js|css)$/,
      threshold: 10240,
      minRatio: 0.8,
    }),
  ],
};

            

Denne konfigurasjonen aktiverer minifisering med Terser og komprimering med Gzip. threshold-alternativet spesifiserer minimumsstørrelsen (i bytes) for at en fil skal komprimeres.

5. Bildeoptimalisering

Bilder kan ofte være en betydelig bidragsyter til applikasjonens buntestørrelse. Optimalisering av bildene dine kan dramatisk forbedre ytelsen.

Teknikker for bildeoptimalisering:

6. Velg biblioteker med omhu

Evaluer nøye bibliotekene du bruker i applikasjonen din. Noen biblioteker kan være ganske store, selv om du bare bruker en liten del av funksjonaliteten deres. Vurder å bruke mindre, mer fokuserte biblioteker som kun gir de funksjonene du trenger.

Eksempel:

I stedet for å bruke et stort bibliotek for datoformatering som Moment.js, vurder å bruke et mindre alternativ som date-fns eller Day.js. Disse bibliotekene er betydelig mindre og gir lignende funksjonalitet.

Sammenligning av buntestørrelse:

7. HTTP/2

HTTP/2 er en nyere versjon av HTTP-protokollen som tilbyr flere ytelsesforbedringer over HTTP/1.1, inkludert:

Å aktivere HTTP/2 på serveren din kan betydelig forbedre ytelsen til React-applikasjonen din, spesielt når du håndterer mange små filer. De fleste moderne webservere og CDN-er støtter HTTP/2.

8. Nettleser-caching

Nettleser-caching lar nettlesere lagre statiske ressurser (som bilder, JavaScript-filer og CSS-filer) lokalt. Når en bruker besøker applikasjonen din på nytt, kan nettleseren hente disse ressursene fra cachen i stedet for å laste dem ned igjen, noe som reduserer lastetidene betydelig.

Konfigurer serveren din til å sette passende cache-headere for dine statiske ressurser. Cache-Control-headeren er den viktigste. Den lar deg spesifisere hvor lenge nettleseren skal cache en ressurs.

Eksempel:

            Cache-Control: public, max-age=31536000
            

Denne headeren forteller nettleseren å cache ressursen i ett år.

9. Server-Side Rendering (SSR)

Server-side rendering (SSR) innebærer å rendre React-komponentene dine på serveren og sende den innledende HTML-koden til klienten. Dette kan forbedre den innledende lastetiden og SEO, ettersom søkemotorer enkelt kan gjennomsøke HTML-innholdet.

Rammeverk som Next.js og Gatsby gjør det enkelt å implementere SSR i React-applikasjonene dine.

Fordeler med SSR:

  • Forbedret innledende lastetid: Nettleseren mottar forhåndsrendret HTML, noe som gjør at den kan vise innhold raskere.
  • Bedre SEO: Søkemotorer kan enkelt gjennomsøke HTML-innholdet, noe som forbedrer applikasjonens rangering i søkemotorer.
  • Forbedret brukeropplevelse: Brukere ser innhold raskere, noe som fører til en mer engasjerende opplevelse.
  • 10. Memoization

    Memoization er en teknikk for å cache resultatene av kostbare funksjonskall og gjenbruke dem når de samme inputene oppstår igjen. I React kan du bruke React.memo(), en høyere-ordens komponent, for å memoize funksjonelle komponenter. Dette forhindrer unødvendige re-rendringer når komponentens props ikke har endret seg.

    Eksempel:

                import React from 'react';
    
    const MyComponent = React.memo(function MyComponent(props) {
      // Render component
      return 
    {props.data}
    ; }); export default MyComponent;

    I dette eksempelet vil MyComponent kun re-rendre hvis props.data-propen endres. Du kan også gi en egendefinert sammenligningsfunksjon til React.memo() hvis du trenger mer kontroll over når komponenten skal re-rendre.

    Eksempler fra den virkelige verden og internasjonale hensyn

    Prinsippene for reduksjon av buntestørrelse er universelle, men anvendelsen kan variere avhengig av den spesifikke konteksten for prosjektet ditt og målgruppen. Her er noen eksempler:

    Verktøy og ressurser

    Her er noen nyttige verktøy og ressurser for reduksjon av buntestørrelse:

    Konklusjon

    Å redusere buntestørrelse er en kontinuerlig prosess som krever nøye oppmerksomhet på detaljer. Ved å implementere teknikkene som er skissert i denne guiden, kan du betydelig forbedre ytelsen til React-applikasjonen din og levere en bedre brukeropplevelse. Husk å regelmessig analysere buntestørrelsen din og identifisere områder for optimalisering. Fordelene med en mindre bunt – raskere lastetider, forbedret brukerengasjement og en bedre helhetsopplevelse – er vel verdt innsatsen.

    Ettersom praksis for webutvikling fortsetter å utvikle seg, er det avgjørende å holde seg oppdatert med de nyeste teknikkene og verktøyene for reduksjon av buntestørrelse for å bygge høytytende React-applikasjoner som møter kravene fra et globalt publikum.