Põhjalik juhend Reacti rakenduse jõudluse optimeerimiseks paketi suuruse vähendamise kaudu. Käsitleb koodi tükeldamist, puu raputamist ja muid tehnikaid arendajatele.
Reacti jõudluse optimeerimine: rakenduspaketi suuruse vähendamise meisterlikkus
Tänapäeva veebiarenduse maastikul on jõudlus esmatähtis. Kasutajad ootavad kiireid ja reageerivaid rakendusi ning aeglaselt laadiv Reacti rakendus võib viia halva kasutajakogemuse, kõrgema põrkemäära ja lõpuks negatiivse mõjuni teie ärile. Üks olulisemaid tegureid, mis mõjutab Reacti rakenduse jõudlust, on teie JavaScripti paketi suurus. Suure paketi allalaadimine, parsimine ja käivitamine võib võtta kauem aega, mille tulemuseks on aeglasemad esialgsed laadimisajad ja loid interaktsioonid.
See põhjalik juhend süveneb erinevatesse tehnikatesse, kuidas vähendada oma Reacti rakenduse paketi suurust, aidates teil pakkuda kiiremat, tõhusamat ja nauditavamat kasutajakogemust. Uurime strateegiaid, mis on kohaldatavad igas suuruses projektidele, alates väikestest ühelehelistest rakendustest kuni keerukate ettevõtte tasemel platvormideni.
Paketi suuruse mõistmine
Enne optimeerimistehnikatesse süvenemist on oluline mõista, mis teie paketi suurust mõjutab ja kuidas seda mõõta. Teie pakett sisaldab tavaliselt:
Rakenduse kood: JavaScript, CSS ja muud varad, mille te oma rakenduse jaoks kirjutate.
Kolmandate osapoolte teegid: Kood välistest teekidest ja sõltuvustest, mida kasutate, näiteks kasutajaliidese komponenditeegid, abifunktsioonid ja andmehaldusvahendid.
Raamistiku kood: Kood, mida React ise vajab, koos seotud teekidega nagu React Router või Redux.
Varad: Pildid, fondid ja muud staatilised varad, mida teie rakendus kasutab.
Tööriistad nagu Webpack Bundle Analyzer, Parcel Visualizer ja Rollup Visualizer aitavad teil visualiseerida oma paketi sisu ja tuvastada suurimad panustajad selle suurusele. Need tööriistad loovad interaktiivseid puukaarte, mis näitavad iga mooduli ja sõltuvuse suurust teie paketis, muutes optimeerimisvõimaluste leidmise lihtsaks. Need on asendamatud liitlased teie püüdlustes luua saledam ja kiirem rakendus.
Paketi suuruse vähendamise tehnikad
Nüüd uurime erinevaid tehnikaid, mida saate kasutada oma Reacti rakenduse paketi suuruse vähendamiseks:
1. Koodi tĂĽkeldamine
Koodi tükeldamine on protsess, mille käigus jagatakse teie rakenduse kood väiksemateks osadeks, mida saab laadida vastavalt vajadusele. Selle asemel, et kogu rakendus korraga alla laadida, laadivad kasutajad alla ainult selle koodi, mida nad esialgse vaate jaoks vajavad. Rakenduses navigeerides laaditakse täiendavad koodiosad asünkroonselt.
React pakub sisseehitatud tuge koodi tükeldamiseks, kasutades React.lazy() ja Suspense komponente. React.lazy() võimaldab komponente dünaamiliselt importida, samal ajal kui Suspense pakub võimalust kuvada varu-kasutajaliidest, kuni komponent laeb.
Näide:
import React, { Suspense, lazy } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function MyPage() {
return (
Laadimine...
}>
);
}
export default MyPage;
Selles näites laaditakse MyComponent alles siis, kui seda vajatakse, vähendades esialgse paketi suurust. 'Laadimine...' teade kuvatakse komponendi laadimise ajal.
Marsruudipõhine koodi tükeldamine: Levinud kasutusjuht koodi tükeldamiseks on rakenduse jagamine marsruutide alusel. See tagab, et kasutajad laadivad alla ainult selle koodi, mis on vajalik hetkel vaadatava lehe jaoks.
Näide, kasutades React Routerit:
import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./Home'));
const About = lazy(() => import('./About'));
const Contact = lazy(() => import('./Contact'));
function App() {
return (
Laadimine...
}>
);
}
export default App;
Iga marsruut selles näites laadib oma vastava komponendi laisalt, parandades rakenduse esialgset laadimisaega.
2. Puu raputamine
Puu raputamine (tree shaking) on tehnika, mis eemaldab teie rakendusest surnud koodi. Surnud kood viitab koodile, mida teie rakenduses tegelikult kunagi ei kasutata, kuid mis on siiski paketti lisatud. See juhtub sageli siis, kui impordite terveid teeke, kuid kasutate ainult väikest osa nende funktsionaalsusest.
Kaasaegsed JavaScripti pakendajad nagu Webpack ja Rollup saavad puu raputamist automaatselt teostada. Et tagada puu raputamise efektiivne toimimine, on oluline kasutada ES mooduleid (import ja export süntaks) CommonJS (require süntaks) asemel. ES moodulid võimaldavad pakendajal teie koodi staatiliselt analüüsida ja kindlaks teha, milliseid eksporditud osi tegelikult kasutatakse.
Näide:
Oletame, et kasutate abiteeki nimega lodash. Selle asemel, et importida kogu teek:
import _ from 'lodash';
_.map([1, 2, 3], (n) => n * 2);
Importige ainult need funktsioonid, mida vajate:
import map from 'lodash/map';
map([1, 2, 3], (n) => n * 2);
See tagab, et teie paketti lisatakse ainult map funktsioon, vähendades oluliselt selle suurust.
3. DĂĽnaamilised importimised
Sarnaselt React.lazy()-le võimaldavad dünaamilised importimised (kasutades import() süntaksit) laadida mooduleid vastavalt vajadusele. See võib olla kasulik suurte teekide või komponentide laadimiseks, mida on vaja ainult teatud olukordades.
Näide:
async function handleClick() {
const module = await import('./MyLargeComponent');
const MyLargeComponent = module.default;
// Use MyLargeComponent
}
Selles näites laaditakse MyLargeComponent alles siis, kui kutsutakse välja funktsioon handleClick, tavaliselt vastusena kasutaja tegevusele.
4. Minifitseerimine ja tihendamine
Minifitseerimine eemaldab teie koodist mittevajalikud märgid, näiteks tühikud, kommentaarid ja kasutamata muutujad. Tihendamine vähendab teie koodi suurust, rakendades algoritme, mis leiavad mustreid ja esitavad neid tõhusamalt.
Enamik kaasaegseid ehitustööriistu, nagu Webpack, Parcel ja Rollup, sisaldavad sisseehitatud tuge minifitseerimiseks ja tihendamiseks. Näiteks kasutab Webpack minifitseerimiseks Terserit ja seda saab konfigureerida kasutama Gzip- või Brotli-tihendust.
See konfiguratsioon võimaldab minifitseerimist Terseri abil ja tihendamist Gzipi abil. Valik threshold määrab minimaalse suuruse (baitides), mille puhul fail tihendatakse.
5. Piltide optimeerimine
Pildid võivad sageli olla oluline osa teie rakenduse paketi suurusest. Piltide optimeerimine võib jõudlust dramaatiliselt parandada.
Piltide optimeerimise tehnikad:
Valige õige vorming: kasutage JPEG-d fotode jaoks, PNG-d läbipaistvusega piltide jaoks ja WebP-d parema tihenduse ja kvaliteedi saavutamiseks.
Tihendage pilte: kasutage tööriistu nagu ImageOptim, TinyPNG või Compressor.io, et vähendada oma piltide failisuurust ilma liigse kvaliteedikaota.
Kasutage responsiivseid pilte: serveerige erineva suurusega pilte vastavalt kasutaja ekraani suurusele. Atribuut srcset<img>-sildis võimaldab teil määrata mitu pildiallikat ja lasta brauseril valida sobivaim.
Piltide laisk laadimine: laadige pilte alles siis, kui need on vaateaknas nähtavad. See võib oluliselt parandada esialgset laadimisaega, eriti paljude piltidega lehtedel. Kasutage <img>-sildil atribuuti loading="lazy".
Kasutage CDN-i: sisuedastusvõrgud (CDN-id) salvestavad teie pilte serverites üle maailma, võimaldades kasutajatel neid alla laadida nende asukohale lähimast serverist. See võib allalaadimisaegu oluliselt vähendada.
6. Valige teeke targalt
Hinnake hoolikalt teeke, mida oma rakenduses kasutate. Mõned teegid võivad olla üsna suured, isegi kui kasutate ainult väikest osa nende funktsionaalsusest. Kaaluge väiksemate, spetsiifilisemate teekide kasutamist, mis pakuvad ainult neid funktsioone, mida vajate.
Näide:
Selle asemel, et kasutada suurt kuupäevade vormindamise teeki nagu Moment.js, kaaluge väiksema alternatiivi, näiteks date-fns või Day.js, kasutamist. Need teegid on oluliselt väiksemad ja pakuvad sarnast funktsionaalsust.
Paketi suuruse võrdlus:
Moment.js: ~240KB (minifitseeritud ja gzipitud)
date-fns: ~70KB (minifitseeritud ja gzipitud)
Day.js: ~7KB (minifitseeritud ja gzipitud)
7. HTTP/2
HTTP/2 on HTTP-protokolli uuem versioon, mis pakub mitmeid jõudlusparandusi võrreldes HTTP/1.1-ga, sealhulgas:
Multipleksimine: Võimaldab saata mitu päringut üle ühe TCP-ühenduse.
Server Push: Võimaldab serveril ennetavalt saata ressursse kliendile enne, kui neid küsitakse.
HTTP/2 lubamine oma serveris võib oluliselt parandada teie Reacti rakenduse jõudlust, eriti paljude väikeste failidega tegelemisel. Enamik kaasaegseid veebiservereid ja CDN-e toetavad HTTP/2-te.
8. Brauseri vahemälu kasutamine
Brauseri vahemälu võimaldab brauseritel salvestada staatilisi varasid (nagu pildid, JavaScripti failid ja CSS-failid) lokaalselt. Kui kasutaja külastab teie rakendust uuesti, saab brauser need varad hankida vahemälust selle asemel, et neid uuesti alla laadida, vähendades oluliselt laadimisaegu.
Konfigureerige oma server seadistama sobivad vahemälu päised oma staatilistele varadele. Kõige olulisem on Cache-Control päis. See võimaldab teil määrata, kui kaua peaks brauser vara vahemälus hoidma.
Näide:
Cache-Control: public, max-age=31536000
See päis ütleb brauserile, et vara tuleks vahemälus hoida ühe aasta.
9. Serveripoolne renderdamine (SSR)
Serveripoolne renderdamine (SSR) hõlmab teie Reacti komponentide renderdamist serveris ja esialgse HTML-i saatmist kliendile. See võib parandada esialgset laadimisaega ja SEO-d, kuna otsingumootorid saavad HTML-sisu hõlpsasti indekseerida.
Raamistikud nagu Next.js ja Gatsby muudavad SSR-i rakendamise teie Reacti rakendustes lihtsaks.
SSR-i eelised:
Parem esialgne laadimisaeg: brauser saab eelrenderdatud HTML-i, mis võimaldab sisu kiiremini kuvada.
Parem SEO: otsingumootorid saavad HTML-sisu hõlpsasti indekseerida, parandades teie rakenduse asetust otsingumootorites.
Parem kasutajakogemus: kasutajad näevad sisu kiiremini, mis viib kaasavama kogemuseni.
10. Memoization
Memoization on tehnika, mis salvestab kulukate funktsioonikutsete tulemused vahemällu ja taaskasutab neid, kui samad sisendid uuesti esinevad. Reactis saate kasutada kõrgema järgu komponenti React.memo() funktsionaalsete komponentide memoïseerimiseks. See hoiab ära tarbetud uuesti renderdamised, kui komponendi propsid pole muutunud.
Selles näites renderdatakse MyComponent uuesti ainult siis, kui props.data prop muutub. Saate pakkuda ka kohandatud võrdlusfunktsiooni React.memo()-le, kui vajate rohkem kontrolli selle üle, millal komponent peaks uuesti renderdama.
Reaalse maailma näited ja rahvusvahelised kaalutlused
Paketi suuruse vähendamise põhimõtted on universaalsed, kuid nende rakendamine võib varieeruda sõltuvalt teie projekti konkreetsest kontekstist ja sihtrühmast. Siin on mõned näited:
E-kaubanduse platvorm Kagu-Aasias: Kagu-Aasia kasutajatele suunatud e-kaubanduse platvormi puhul, kus mobiilse andmeside kiirused võivad olla aeglasemad ja andmesidekulud kõrgemad, on piltide suuruse optimeerimine ja agressiivse koodi tükeldamise rakendamine üliolulised. Kaaluge WebP piltide ja piirkonnas asuvate serveritega CDN-i kasutamist. Samuti on oluline toote piltide laisk laadimine.
Haridusrakendus Ladina-Ameerikas: Ladina-Ameerika õpilastele suunatud haridusrakendus võib kasu saada serveripoolsest renderdamisest (SSR), et tagada kiire esialgne laadimisaeg vanematel seadmetel. Väiksema ja kergema kasutajaliidese teegi kasutamine võib samuti vähendada paketi suurust. Samuti kaaluge hoolikalt oma rakenduse rahvusvahelistamise (i18n) aspekte. Suured i18n-teegid võivad paketi suurust märkimisväärselt suurendada. Uurige tehnikaid, nagu lokaadipõhiste andmete dünaamiline laadimine.
Finantsteenuste rakendus Euroopas: Euroopa kasutajatele suunatud finantsteenuste rakendus peab esikohale seadma turvalisuse ja jõudluse. Kuigi SSR võib parandada esialgset laadimisaega, on oluline tagada, et tundlikud andmed ei oleks serveris paljastatud. Pöörake erilist tähelepanu oma graafikute ja andmete visualiseerimise teekide paketi suurusele, kuna need võivad sageli olla üsna suured.
Globaalne sotsiaalmeedia platvorm: Ülemaailmsete kasutajatega sotsiaalmeedia platvorm peab rakendama tervikliku strateegia paketi suuruse vähendamiseks. See hõlmab koodi tükeldamist, puu raputamist, piltide optimeerimist ja mitmes piirkonnas asuvate serveritega CDN-i kasutamist. Kaaluge teenusetöötaja (service worker) kasutamist staatiliste varade vahemällu salvestamiseks ja võrguühenduseta juurdepääsu pakkumiseks.
Tööriistad ja ressursid
Siin on mõned kasulikud tööriistad ja ressursid paketi suuruse vähendamiseks:
Webpack Bundle Analyzer: tööriist teie Webpacki paketi sisu visualiseerimiseks.
Parcel Visualizer: tööriist teie Parceli paketi sisu visualiseerimiseks.
Rollup Visualizer: tööriist teie Rollupi paketi sisu visualiseerimiseks.
Google PageSpeed Insights: tööriist teie veebilehtede jõudluse analüüsimiseks ja parandamist vajavate valdkondade tuvastamiseks.
Web.dev Measure: veel üks Google'i tööriist, mis analüüsib teie saiti ja annab praktilisi soovitusi.
Lighthouse: avatud lähtekoodiga automatiseeritud tööriist veebilehtede kvaliteedi parandamiseks. See sisaldab auditeid jõudluse, ligipääsetavuse, progressiivsete veebirakenduste, SEO ja muu kohta.
Bundlephobia: veebisait, mis võimaldab kontrollida npm pakettide suurust.
Kokkuvõte
Paketi suuruse vähendamine on pidev protsess, mis nõuab hoolikat tähelepanu detailidele. Rakendades selles juhendis kirjeldatud tehnikaid, saate oma Reacti rakenduse jõudlust märkimisväärselt parandada ja pakkuda paremat kasutajakogemust. Ärge unustage regulaarselt analüüsida oma paketi suurust ja tuvastada optimeerimist vajavaid valdkondi. Väiksema paketi eelised – kiiremad laadimisajad, parem kasutajate kaasatus ja parem üldine kogemus – on pingutust väärt.
Kuna veebiarenduse praktikad arenevad pidevalt, on paketi suuruse vähendamise uusimate tehnikate ja tööriistadega kursis olemine ülioluline, et ehitada suure jõudlusega Reacti rakendusi, mis vastavad globaalse publiku nõudmistele.