React prestandaoptimering: BemÀstra reducering av paketstorlek | MLOG | MLOG

Varje rutt i detta exempel laddar sin motsvarande komponent med lazy loading, vilket förbÀttrar applikationens initiala laddningstid.

2. Tree Shaking

Tree shaking Àr en teknik som eliminerar död kod frÄn din applikation. Död kod Àr kod som aldrig faktiskt anvÀnds i din applikation, men som ÀndÄ inkluderas i paketet. Detta hÀnder ofta nÀr du importerar hela bibliotek men bara anvÀnder en liten del av deras funktionalitet.

Moderna JavaScript-bundlers som Webpack och Rollup kan automatiskt utföra tree shaking. För att sÀkerstÀlla att tree shaking fungerar effektivt Àr det viktigt att anvÀnda ES-moduler (import och export-syntax) istÀllet för CommonJS (require-syntax). ES-moduler tillÄter bundlern att statiskt analysera din kod och avgöra vilka exporter som faktiskt anvÀnds.

Exempel:

LÄt oss sÀga att du anvÀnder ett hjÀlpbibliotek som heter lodash. IstÀllet för att importera hela biblioteket:

            import _ from 'lodash';

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

Importera endast de funktioner du behöver:

            import map from 'lodash/map';

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

Detta sÀkerstÀller att endast map-funktionen inkluderas i ditt paket, vilket minskar dess storlek avsevÀrt.

3. Dynamiska importer

Liknande React.lazy() tillÄter dynamiska importer (med import()-syntaxen) att du laddar moduler vid behov. Detta kan vara anvÀndbart för att ladda stora bibliotek eller komponenter som bara behövs i specifika situationer.

Exempel:

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

            

I detta exempel kommer MyLargeComponent endast att laddas nÀr handleClick-funktionen anropas, vanligtvis som svar pÄ en anvÀndarÄtgÀrd.

4. Minifiering och komprimering

Minifiering tar bort onödiga tecken frÄn din kod, sÄsom blanksteg, kommentarer och oanvÀnda variabler. Komprimering minskar storleken pÄ din kod genom att tillÀmpa algoritmer som hittar mönster och representerar dem mer effektivt.

De flesta moderna byggverktyg, som Webpack, Parcel och Rollup, inkluderar inbyggt stöd för minifiering och komprimering. Till exempel anvÀnder Webpack Terser för minifiering och kan konfigureras för att anvÀnda Gzip eller Brotli för komprimering.

Exempel (Webpack-konfiguration):

            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,
    }),
  ],
};

            

Denna konfiguration aktiverar minifiering med Terser och komprimering med Gzip. Alternativet threshold specificerar den minsta storleken (i bytes) för att en fil ska komprimeras.

5. Bildoptimering

Bilder kan ofta vara en betydande bidragsgivare till din applikations paketstorlek. Att optimera dina bilder kan dramatiskt förbÀttra prestandan.

Tekniker för bildoptimering:

6. VĂ€lj bibliotek med omsorg

UtvĂ€rdera noggrant de bibliotek du anvĂ€nder i din applikation. Vissa bibliotek kan vara ganska stora, Ă€ven om du bara anvĂ€nder en liten del av deras funktionalitet. ÖvervĂ€g att anvĂ€nda mindre, mer fokuserade bibliotek som endast tillhandahĂ„ller de funktioner du behöver.

Exempel:

IstÀllet för att anvÀnda ett stort datumformateringsbibliotek som Moment.js, övervÀg att anvÀnda ett mindre alternativ som date-fns eller Day.js. Dessa bibliotek Àr betydligt mindre och erbjuder liknande funktionalitet.

JÀmförelse av paketstorlek:

7. HTTP/2

HTTP/2 Àr en nyare version av HTTP-protokollet som erbjuder flera prestandaförbÀttringar jÀmfört med HTTP/1.1, inklusive:

Att aktivera HTTP/2 pÄ din server kan avsevÀrt förbÀttra prestandan för din React-applikation, sÀrskilt nÀr du hanterar mÄnga smÄ filer. De flesta moderna webbservrar och CDN:er stöder HTTP/2.

8. WebblÀsarcachelagring

WebblÀsarcachelagring (browser caching) lÄter webblÀsare lagra statiska tillgÄngar (som bilder, JavaScript-filer och CSS-filer) lokalt. NÀr en anvÀndare ÄtervÀnder till din applikation kan webblÀsaren hÀmta dessa tillgÄngar frÄn cachen istÀllet för att ladda ner dem igen, vilket avsevÀrt minskar laddningstiderna.

Konfigurera din server för att stÀlla in lÀmpliga cache-headers för dina statiska tillgÄngar. Cache-Control-headern Àr den viktigaste. Den lÄter dig specificera hur lÀnge webblÀsaren ska cacha en tillgÄng.

Exempel:

            Cache-Control: public, max-age=31536000
            

Denna header talar om för webblÀsaren att cacha tillgÄngen i ett Är.

9. Server-Side Rendering (SSR)

Server-side rendering (SSR) innebÀr att dina React-komponenter renderas pÄ servern och den initiala HTML-koden skickas till klienten. Detta kan förbÀttra den initiala laddningstiden och SEO, eftersom sökmotorer enkelt kan genomsöka HTML-innehÄllet.

Ramverk som Next.js och Gatsby gör det enkelt att implementera SSR i dina React-applikationer.

Fördelar med SSR:

  • FörbĂ€ttrad initial laddningstid: WebblĂ€saren tar emot förrenderad HTML, vilket gör att den kan visa innehĂ„ll snabbare.
  • BĂ€ttre SEO: Sökmotorer kan enkelt genomsöka HTML-innehĂ„llet, vilket förbĂ€ttrar din applikations ranking i sökmotorer.
  • FörbĂ€ttrad anvĂ€ndarupplevelse: AnvĂ€ndare ser innehĂ„ll snabbare, vilket leder till en mer engagerande upplevelse.
  • 10. Memoization

    Memoization Àr en teknik för att cacha resultaten av kostsamma funktionsanrop och ÄteranvÀnda dem nÀr samma indata förekommer igen. I React kan du anvÀnda högre ordningens komponent React.memo() för att memoizera funktionella komponenter. Detta förhindrar onödiga omrenderingar nÀr komponentens props inte har Àndrats.

    Exempel:

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

    I detta exempel kommer MyComponent endast att omrenderas om props.data-propen Àndras. Du kan ocksÄ skicka en anpassad jÀmförelsefunktion till React.memo() om du behöver mer kontroll över nÀr komponenten ska omrenderas.

    Verkliga exempel och internationella övervÀganden

    Principerna för att minska paketstorleken Àr universella, men deras tillÀmpning kan variera beroende pÄ den specifika kontexten för ditt projekt och din mÄlgrupp. HÀr Àr nÄgra exempel:

    Verktyg och resurser

    HÀr Àr nÄgra anvÀndbara verktyg och resurser för att minska paketstorleken:

    Slutsats

    Att minska paketstorleken Ă€r en pĂ„gĂ„ende process som krĂ€ver noggrann uppmĂ€rksamhet pĂ„ detaljer. Genom att implementera teknikerna som beskrivs i denna guide kan du avsevĂ€rt förbĂ€ttra prestandan för din React-applikation och leverera en bĂ€ttre anvĂ€ndarupplevelse. Kom ihĂ„g att regelbundet analysera din paketstorlek och identifiera omrĂ„den för optimering. Fördelarna med ett mindre paket – snabbare laddningstider, förbĂ€ttrat anvĂ€ndarengagemang och en bĂ€ttre övergripande upplevelse – Ă€r vĂ€l vĂ€rda anstrĂ€ngningen.

    I takt med att praxis för webbutveckling fortsÀtter att utvecklas Àr det avgörande att hÄlla sig uppdaterad med de senaste teknikerna och verktygen för att minska paketstorleken för att bygga högpresterande React-applikationer som möter kraven frÄn en global publik.