„React“ našumo optimizavimas: paketo dydžio mažinimo meistriškumas | MLOG | MLOG

Kiekvienas maršrutas šiame pavyzdyje įkelia atitinkamą komponentą tingiai (lazily), taip pagerindamas pradinį programos įkėlimo laiką.

2. „Tree Shaking“

„Tree shaking“ yra technika, kuri pašalina nenaudojamą kodą (dead code) iš jūsų programos. Nenaudojamas kodas yra kodas, kuris niekada nėra faktiškai naudojamas jūsų programoje, bet vis tiek yra įtraukiamas į paketą. Tai dažnai nutinka, kai importuojate visas bibliotekas, bet naudojate tik nedidelę jų funkcionalumo dalį.

Šiuolaikiniai „JavaScript“ paketų kūrimo įrankiai, tokie kaip „Webpack“ ir „Rollup“, gali automatiškai atlikti „tree shaking“. Norint užtikrinti, kad „tree shaking“ veiktų efektyviai, svarbu naudoti ES modulius (import ir export sintaksę) vietoj „CommonJS“ (require sintaksės). ES moduliai leidžia paketų kūrimo įrankiui statiškai analizuoti jūsų kodą ir nustatyti, kurie eksportai yra iš tikrųjų naudojami.

Pavyzdys:

Tarkime, naudojate pagalbinę biblioteką, pavadintą lodash. Vietoj to, kad importuotumėte visą biblioteką:

            import _ from 'lodash';

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

Importuokite tik tas funkcijas, kurių jums reikia:

            import map from 'lodash/map';

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

Tai užtikrina, kad į jūsų paketą bus įtraukta tik map funkcija, o tai žymiai sumažins jo dydį.

3. Dinaminiai importai

Panašiai kaip React.lazy(), dinaminiai importai (naudojant import() sintaksę) leidžia įkelti modulius pagal poreikį. Tai gali būti naudinga įkeliant dideles bibliotekas ar komponentus, kurie reikalingi tik tam tikrose situacijose.

Pavyzdys:

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

            

Šiame pavyzdyje MyLargeComponent bus įkeltas tik tada, kai bus iškviesta handleClick funkcija, paprastai reaguojant į vartotojo veiksmą.

4. Minifikavimas ir suspaudimas

Minifikavimas pašalina nereikalingus simbolius iš jūsų kodo, tokius kaip tarpai, komentarai ir nenaudojami kintamieji. Suspaudimas sumažina jūsų kodo dydį taikant algoritmus, kurie randa šablonus ir efektyviau juos atvaizduoja.

Dauguma šiuolaikinių kūrimo įrankių, tokių kaip „Webpack“, „Parcel“ ir „Rollup“, turi integruotą minifikavimo ir suspaudimo palaikymą. Pavyzdžiui, „Webpack“ naudoja „Terser“ minifikavimui ir gali būti sukonfigūruotas naudoti „Gzip“ arba „Brotli“ suspaudimui.

Pavyzdys („Webpack“ konfigūracija):

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

            

Ši konfigūracija įjungia minifikavimą naudojant „Terser“ ir suspaudimą naudojant „Gzip“. threshold parinktis nurodo minimalų failo dydį (baitais), kad jis būtų suspaustas.

5. Paveikslėlių optimizavimas

Paveikslėliai dažnai gali sudaryti didelę jūsų programos paketo dydžio dalį. Paveikslėlių optimizavimas gali dramatiškai pagerinti našumą.

Paveikslėlių optimizavimo technikos:

6. Išmintingai rinkitės bibliotekas

Atidžiai įvertinkite bibliotekas, kurias naudojate savo programoje. Kai kurios bibliotekos gali būti gana didelės, net jei naudojate tik nedidelę jų funkcionalumo dalį. Apsvarstykite galimybę naudoti mažesnes, labiau specializuotas bibliotekas, kurios teikia tik jums reikalingas funkcijas.

Pavyzdys:

Vietoj to, kad naudotumėte didelę datų formatavimo biblioteką, tokią kaip „Moment.js“, apsvarstykite galimybę naudoti mažesnę alternatyvą, pavyzdžiui, „date-fns“ ar „Day.js“. Šios bibliotekos yra žymiai mažesnės ir teikia panašų funkcionalumą.

Paketo dydžio palyginimas:

7. HTTP/2

HTTP/2 yra naujesnė HTTP protokolo versija, kuri siūlo keletą našumo patobulinimų, palyginti su HTTP/1.1, įskaitant:

Įjungus HTTP/2 savo serveryje galima žymiai pagerinti jūsų „React“ programos našumą, ypač dirbant su daugeliu mažų failų. Dauguma šiuolaikinių žiniatinklio serverių ir CDN palaiko HTTP/2.

8. Naršyklės podėliavimas (Caching)

Naršyklės podėliavimas leidžia naršyklėms saugoti statinius resursus (tokius kaip paveikslėliai, „JavaScript“ ir CSS failai) vietoje. Kai vartotojas vėl apsilanko jūsų programoje, naršyklė gali gauti šiuos resursus iš podėlio, užuot juos vėl atsisiuntusi, taip žymiai sutrumpinant įkėlimo laiką.

Sukonfigūruokite savo serverį, kad jis nustatytų tinkamas podėlio antraštes jūsų statiniams resursams. Cache-Control antraštė yra svarbiausia. Ji leidžia nurodyti, kiek laiko naršyklė turėtų saugoti resursą podėlyje.

Pavyzdys:

            Cache-Control: public, max-age=31536000
            

Ši antraštė nurodo naršyklei saugoti resursą podėlyje vienerius metus.

9. Vykdymas serveryje (SSR - Server-Side Rendering)

Vykdymas serveryje (SSR) apima jūsų „React“ komponentų atvaizdavimą serveryje ir pradinio HTML siuntimą klientui. Tai gali pagerinti pradinį įkėlimo laiką ir SEO, nes paieškos sistemos gali lengvai nuskaityti HTML turinį.

Framework'ai, tokie kaip „Next.js“ ir „Gatsby“, palengvina SSR įgyvendinimą jūsų „React“ programose.

SSR privalumai:

  • Pagerintas pradinis įkėlimo laikas: Naršyklė gauna iš anksto atvaizduotą HTML, leidžiantį greičiau parodyti turinį.
  • Geresnis SEO: Paieškos sistemos gali lengvai nuskaityti HTML turinį, pagerindamos jūsų programos reitingą paieškos sistemose.
  • Patobulinta vartotojo patirtis: Vartotojai greičiau mato turinį, o tai lemia labiau įtraukiančią patirtį.
  • 10. Memoizacija

    Memoizacija yra technika, skirta talpinti brangių funkcijų iškvietimų rezultatus ir juos pakartotinai naudoti, kai vėl pasitaiko tie patys įvesties duomenys. „React“ aplinkoje galite naudoti aukštesnės eilės komponentą React.memo() funkciniams komponentams memoizuoti. Tai apsaugo nuo nereikalingų pervaizdavimų, kai komponento savybės (props) nepasikeitė.

    Pavyzdys:

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

    Šiame pavyzdyje MyComponent bus pervaizduotas tik tada, jei pasikeis props.data savybė. Taip pat galite pateikti pasirinktinę palyginimo funkciją React.memo(), jei jums reikia daugiau kontrolės, kada komponentas turėtų būti pervaizduotas.

    Realaus pasaulio pavyzdžiai ir tarptautiniai aspektai

    Paketo dydžio mažinimo principai yra universalūs, tačiau jų taikymas gali skirtis priklausomai nuo konkretaus jūsų projekto konteksto ir tikslinės auditorijos. Štai keletas pavyzdžių:

    Įrankiai ir ištekliai

    Štai keletas naudingų įrankių ir išteklių paketo dydžiui mažinti:

    Išvada

    Paketo dydžio mažinimas yra nuolatinis procesas, reikalaujantis atidaus dėmesio detalėms. Įgyvendindami šiame vadove aprašytas technikas, galite žymiai pagerinti savo „React“ programos našumą ir suteikti geresnę vartotojo patirtį. Nepamirškite reguliariai analizuoti savo paketo dydį ir nustatyti optimizavimo sritis. Mažesnio paketo privalumai – greitesnis įkėlimo laikas, didesnis vartotojų įsitraukimas ir geresnė bendra patirtis – yra verti pastangų.

    Kadangi žiniatinklio kūrimo praktikos ir toliau tobulėja, norint kurti aukšto našumo „React“ programas, atitinkančias pasaulinės auditorijos poreikius, labai svarbu nuolat sekti naujausias paketo dydžio mažinimo technikas ir įrankius.