Par šo rīku
JavaScript samazināšana samazina avota koda lielumu, noņemot nevajadzīgās rakstzīmes un (ar atbilstošiem minifikatoriem) pārdēvējot vietējos mainīgos uz īsākiem nosaukumiem. Pirmā kategorija — atstarpes un komentāru noņemšana — ir vienkārša un bez riska. Otrajā gadījumā — mainīgo pārdēvēšanai — ir jāsaprot tvēruma noteikumi, un tas ir tas, ko vislabāk dara tādi ražošanas miniaparāti kā Terser un esbuild.
Šis rīks koncentrējas uz drošu samazināšanu: komentāru noņemšanu, atstarpju sakļaušanu, lieko semikolu noņemšanu un acīmredzamo rakstu saīsināšanu. Mainīgo pārdēvēšana ir konservatīva — tiek skarti tikai lokālie mainīgie skaidrā tvērumā, un ārējie nosaukumi tiek atstāti atsevišķi. Rezultāts ir funkcionāli identisks avotam.
Ražošanas līmeņa samazināšanai īpašie rīki (Terser, esbuild, swc) saprot visu ECMAScript tvēruma modeli un rada ievērojami mazāku izvadi. Šis rīks ir paredzēts ātrai pārlūkprogrammas samazināšanai, ja nav pieejama pilna versijas iestatīšana.
Kāpēc samazināt JavaScript
JavaScript komplekti parasti ir lielākais resurss mūsdienu tīmekļa lapā. Samazināšanās parasti samazina izmēru par 30–60%, salīdzinot ar nesamazināto avotu. Apvienojumā ar gzip vai Brotli samazinājums nedaudz samazinās, taču kombinācija joprojām ietaupa izmērāmus baitus — īpaši lietotājiem, kuri izmanto lēnus savienojumus.
Ātrāks JavaScript nozīmē arī ātrāku laiku līdz interaktīvam. Mazāki skripti tiek lejupielādēti ātrāk, ātrāk parsēti un ātrāk izpildīti. Vietnēs, kurās TTI ietekmē atlēcienu līmeni un SEO rangu, samazināšana ir viens no lētākajiem pieejamajiem laimestiem.
Tehniskās detaļas
Minifikators tokenizē JavaScript, izmantojot parsētāju, kas ievēro ECMAScript sintaksi. Komentāri (vienrindas un vairāku rindiņu) tiek noņemti, izņemot licences komentārus, kas atzīmēti ar /*! priedēklis. Atstarpes ir sakļautas, izņemot gadījumus, kad tas ir nepieciešams sintaktiski (starp identifikatoriem, pēc atslēgvārdiem).
Konservatīvā mainīgo pārdēvēšana saīsina vietējos mainīgos vienkāršā tvērumā. Globālie, eksportētie un importētie nosaukumi netiek pārdēvēti — tas izjauktu ārējās atsauces. Padziļinātai pārdēvēšanai izmantojiet Terser vai esbuild ar atbilstošu moduļu analīzi.
Malu gadījumi: automātiska semikola ievietošana (ASI) nozīmē, ka minifikatoram dažos kontekstos ir jāsaglabā jaunās rindiņas, lai izvairītos no programmas darbības maiņas. Veidņu literāļi, regex literāļi un JSX (ja ievade to ietver) tiek saglabāti tieši tāpēc, ka to saturu var nebūt droši saspiest.
Bieži uzdotie jautājumi
- Vai samazināšana maina mana koda darbību?
- Nē. Samazināšanās noņem atstarpes un komentārus, kas neietekmē izpildi. Mainīgo saīsināšana (jaukšana) pārdēvē lokālos mainīgos, bet saglabā uzvedību. Globālie mainīgie un eksportētie nosaukumi tiek saglabāti neskarti.
- Vai man ir jāsamazina izstrāde vai ražošana?
- Ražošanā izmantojiet tikai samazinātu kodu. Izstrādes laikā saglabājiet oriģinālo lasāmo kodu. Lielākā daļa veidošanas rīku (Webpack, Vite, esbuild) automātiski apstrādā samazināšanu kā daļu no ražošanas veidošanas procesa.
- Kāda ir atšķirība starp samazināšanu un apmulsināšanu?
- Samazināšana samazina izmēru, vienlaikus saglabājot kodu funkcionāli lasāmu, ja tas ir formatēts. Aptumšošanās apzināti padara kodu grūti saprotamu (virknes kodēšana, vadības plūsmas saplacināšana). Šis rīks koncentrējas uz izmēra samazināšanu, nevis apmulsināšanu.
- Cik lielu izmēra samazinājumu man vajadzētu sagaidīt?
- Parasti 30–60% pirms gzip. Labi komentēts kods ar gariem mainīgo nosaukumiem redz lielāko samazinājumu. Apvienojumā ar gzip saspiešanu JavaScript faili bieži ir par 80–90% mazāki nekā sākotnējais avots.
- Vai mans kods ir augšupielādēts serverī?
- Nē. Minētais darbojas jūsu pārlūkprogrammā.
- Cik mazāks būs mans JavaScript?
- Parasti samazinājums par 30–60%. Mainīgs kods ar gariem identifikatoriem vairāk saspiež; Izteiksmīgi kods saspiež mazāk.
- Vai man vajadzētu samazināt ar roku?
- Nekad. Saglabājiet lasāmu JavaScript avotā. Palaidiet samazināšanu kā izveides posmu vai kā izvietošanas daļu.
- Vai tas darbojas uz TypeScript?
- TypeScript vispirms ir jākompilē JavaScript, izmantojot tsc vai esbuild. Pēc apkopošanas iegūto JavaScript var samazināt.