Këndor {{AOT vs JIT} vs Përpiluesi React: Pjesa - I

Le të fillojmë duke krahasuar Interpretuesin dhe përpiluesin

Një përpilues nga X në Y është një program që përkthen çdo program p nga disa gjuhë X në një program semantikisht të barabartë p ′ në disa gjuhë Y në atë mënyrë që të ruhen semantika e programit, d.m.th që interpretimi p ′ me një interpretues për Y do të japë të njëjtat rezultate dhe do të ketë të njëjtat efekte si interpretimi p me një interpretues për X.

Përpiluesi === Përkthyesi

Përpiluesi Vs Interpretuesi

Një interpretues për gjuhën A është një program që ekzekuton çdo program p të shkruar në gjuhën X në mënyrë që të kryejë efektet dhe të vlerësojë rezultatet siç përshkruhet nga specifikimi i X.

Përgjegjësi === Përmbaruesi

Përpiluesi në këndor 1

Një përpilues i përgjithshëm

Përpiluesi AngularJS 1.x i cili është mjaft gjenerik në natyrë i cili punon për çdo shabllon duke kryer një grup të llogaritjeve dinamike. Për shkak të kësaj natyre, JavaScript Virtual Machine lufton me optimizimin e llogaritjes në nivelin më të ulët. Arsyeja kryesore prapa është:

`VM nuk i di format e objekteve që sigurojnë kontekstin për logjikën e kontrollit të ndotur (d.m.th. të ashtuquajturat fushëveprim), ato janë të fshehura brenda informacionit marrin shumë gabime që ngadalësojnë ekzekutimin.

Përpiluesit në Angular 2 ++

JIT

Në fazën fillestare të aplikacionit Angular 2 kur futet në hapësirë ​​në shfletuesin, përpiluesi JIT kryen shumë punë (analizimi i shablloneve të komponentëve sa herë që përdoruesi hap faqen e internetit, një pjesë që shndërron modele HTML në kod të shfrenuar) për të analizuar komponentët në aplikacionin në kohën e funksionimit dhe gjeneroni kod në memorje. Kur faqja të rifreskohet, të gjitha punët që janë bërë janë hedhur, dhe përpiluesi JIT bën punën përsëri. Ky ishte një avantazh i madh pengesash në AOT

Rrjedha e ngjarjeve me përpilim vetëm në kohë

  • Zhvillimi i aplikacionit Angular me TypeScript dhe përpilimi i aplikacionit me Tsc.
  • Paketimi → Minifikimi → Vendosja
  • Tek klienti → Shkarkoni të gjitha pasuritë e JavaScript → Bootstraps këndore → Angular kalon në procesin e përpilimit JiT → Aplikacioni bëhet.
Pasqyrë e JIT Bundle

AOT

Përpiluesi shndërron kodin TS në kodin JS (ky JS tashmë është përpiluar edhe për këndore). Tani, ky kod i përpiluar JS është përpiluar përsëri nga shfletuesi përsëri në mënyrë që HTML të mund të jepet. Kështu tiparet e këndore tashmë janë kujdesur nga përpiluesi AOT dhe për këtë arsye shfletuesi nuk ka pse të shqetësohet shumë për zbulimin e ndryshimit, krijimin e përbërësve dhe injeksionin e varësisë.

Përpilimi AOT

Kështu, ne e zhvendosim përpilimin jashtë kohës së funksionimit (shfletuesit) në gjenerimin e kodit burimor. Kjo mënyrë përpilimi ndodh vetëm një herë në kohën e ndërtimit dhe ne nuk kemi më nevojë të dërgojmë përpiluesit Angular dhe shabllonet HTML në pako.

Në Angular 5+, ju do të jeni në gjendje të lini pas dore JiT dhe të shkoni me AoT të plotë, madje edhe për ndërtime zhvillimi !!!

Rrjedha e ngjarjeve me përpilimin përpara kohe

  • Zhvillimi i aplikacionit Angular me TypeScript → Përpilimi i aplikacionit me ngc → Kryen përpilimin e shablloneve me përpiluesin këndor dhe gjeneron (zakonisht) TypeScript
  • Përpilimi i kodit TypeScript në JavaScript → Bundling → Minifikimi → Vendosja
  • Klienti → Shkarkoni të gjitha pasuritë → Paraqitjet këndore dhe prezantuesit e aplikacioneve
Pasqyrë e AOT Bundle

Karakteristikat AOT

Regjistrim më i shpejtë, Kërkesa më pak asinkrone, Madhësia e shkarkimit të kornizës më të vogël këndore dhe Zbulimi i gabimeve të shablloneve më parë

Përpiluesi në React

JSX mbështet të dyja Babelin dhe TypeScript që nga fillimi i kohës, gjë që e bëri integrimin me JavaScript të ndërtohet e thjeshtë dhe të reagojë nuk i intereson versioni që përdoret nga të dyja Babel dhe TypeScript i cili është më pak shqetësues.

Përpiluesi i React First vlerëson pemët e komponentëve React dhe bën një optimizim inteligjent për komponentët tuaj React. Përpiluesi i reagimit duhet të dijë përbërësin rrënjësor të paketës së aplikimit dhe pasi të merret parasysh që automatikisht duhet të përcaktojë të gjithë pemën përbërëse të përbërësve nga kjo.

Për t'i treguar kompaktuesit React se cili është komponenti rrënjësor për aplikacionin tuaj, duhet të përdorni një funksion global Prepack të quajtur __optimizeReactComponentTree (MyRootReactComponent). Për shembull, në sourecode tuaj (para se ta bartni atë dhe ta kaloni atë në Prepack) mund të bëni:

// MyComponent.js
Reagimi i importit nga 'reagoj';
klasa MyComponent shtrihet React. Component {
  jap ()
    kthimi  Përshëndetje botë! ;
  }
}
// __optimizeReactComponentTree është e njohur vetëm për Prepack
// kështu që ne e mbështjellim atë në një kusht të tillë që kodi akoma të funksionojë
// për testimin e zhvillimit lokal pa Prpeack
nëse (globale .__ optimizoniKontrollin e KomponentitTree) {
  __optimizeReactComponentTree (MyComponent);
}
module.exports = MyComponent;

React harton në kodin JavaScript që manipulon DOM-in virtual ndërsa Angular përpilon kodin JavaScript që manipulon direkt DOM-in. Nuk ka kuptim shumë të thellë të këndeve dhe reagimit në nivelin e kodit. Le të eksplorojmë më shumë në blogun tim të rradhës. :)