Bucaqlı {{AOT vs JIT}} vs React tərtibçisi: Hissə - I

Tərcüməçi və Kompilyatoru müqayisə edərək başlayaq

X-dən Y-ya qədər olan bir tərtibçi, hansısa bir proqramı bir dildən X-ni bir dildə semantik olaraq ekvivalent bir proqrama çevirən bir proqramdır ki, proqramın semantikası qorunub saxlanılan şəkildə, yəni p-ni tərcüməçi ilə tərcümə edən bir proqramdır. Y üçün eyni nəticələr verəcək və X üçün tərcüməçi ilə p tərcüməsi ilə eyni təsir göstərəcəkdir.

Tərtib edən === Tərcüməçi

Tərtib edən Vs Tərcüməçi

A dilinin tərcüməçisi X dilində yazılmış hər hansı bir proqramı yerinə yetirən bir proqramdır ki, təsirləri yerinə yetirir və nəticələri X-nin dəqiqləşdirməsində göstərildiyi kimi qiymətləndirir.

Tutucu === İcraçı

Bucaq 1-də tərtib edən

Bir ümumi tərtibçi

Dinamik hesablamalar dəsti ilə hər hansı bir şablon üçün işləyən təbiəti olduqca ümumi olan AngularJS 1.x kompilyatoru. Bu xüsusiyyətinə görə JavaScript Virtual Maşın aşağı səviyyədə hesablamanı optimallaşdırmaqla mübarizə aparır. Bunun arxasında duran əsas səbəb:

"VM çirkli yoxlama məntiqinə (yəni sözdə əhatə dairəsinə) görə kontekst təmin edən cisimlərin şəklini bilmir.

Bucaqlı 2 ++ tərtibçiləri

JIT

Brauzerdə yükləndikdə Angular 2 tətbiqetməsinin başlanğıc mərhələsində JIT tərtibçisi komponentləri təhlil etmək üçün çox sayda iş görür (istifadəçi veb səhifəni açdıqda komponent şablonlarını təhlil edir, HTML şablonlarını işlədilən koda çevirən bir hissə) iş zamanı tətbiqetmədə və yaddaşda kod yaradır. Səhifə yeniləndikdə, görülən bütün işlər atılır və JIT tərtibçisi işi yenidən tamamlayır. Bu AOT-a böyük bir geriləmə səbəb oldu

Just-in-Time Compilation ilə hadisələrin axını

  • TypeScript ilə bucaqlı tətbiqin inkişafı və Tsc ilə tətbiqin tərtib edilməsi.
  • Paket → Dəqiqləşdirmə → yerləşdirmə
  • Müştəridə → Bütün JavaScript aktivlərini yükləyin → Bucaq açılış işarələri → Bucaqlı JiT tərtib prosesindən keçir → Tətbiq göstərilir
JIT Bundle Baxışı

AOT

Kompilyator TS kodunu JS koduna çevirir (bu JS artıq bucaqlı üçün də tərtib edilmişdir). İndi bu tərtib edilmiş JS kodu yenidən brauzer tərəfindən yenidən tərtib edilir ki, HTML göstərilə bilsin. Beləliklə, açısal xüsusiyyətlər AOT tərtibçisi tərəfindən əvvəlcədən diqqətə alınmışdır və buna görə brauzer dəyişiklik aşkarlanması, komponentlərin yaradılması və asılılıq inyeksiyası barədə çox narahat olmaq məcburiyyətində deyil.

AOT tərtibatı

Beləliklə, tərtibatı işə salma vaxtından (brauzerdən) mənbə kod nəslinə keçiririk. Bu şəkildə tərtib yalnız bir anda baş verir və artıq bucaqlı kompilyatoru və HTML şablonlarını paketə göndərməyimizə ehtiyac yoxdur.

Bucaqlı 5+ -də, JiT-i laqeyd qoyub tam AoT-a keçə bilərsiniz, hətta inkişaf qurur !!!

Əvvəlcədən vaxt tərtib edən hadisələr axını

  • TypeScript ilə bucaqlı tətbiqin inkişafı → Ngc ilə tətbiqin tərtibi → Şablonların Angular tərtibçisi ilə tərtibini həyata keçirir və (adətən) TypeScript yaradır
  • TypeScript kodunun JavaScript-ə yığılması → Dəstəkləmə → Dəqiqləşdirmə → yerləşdirmə
  • Müştəri → Bütün aktivləri yükləyin → Bucaq açılış kəmərləri və tətbiq təqdim edir
AOT Bundle Baxışı

AOT xüsusiyyətləri

Daha sürətli göstərmə, Daha az asinxron istək, Daha Kiçik Bucaqlı çərçivə yükləmə ölçüsü və Şablon səhvlərini əvvəlcədən aşkar edin

Reaksiya tərtibçisi

JavaScript ilə inteqrasiyanı asanlaşdıran və reaksiya verən babel və TypeScript-in həm az, həm də daha az narahat olan versiyanı istifadə etməyini əvvəldən bəri JSX dəstəkləyir.

First React compiler React komponent ağaclarını qiymətləndirir və React komponentlərinizə ağıllı bir optimisasiya edir. Reaktiv tərtibçi tətbiq paketinin kök komponentini bilməli və bir dəfə bu komponentlərin bütün komponent ağacını avtomatik olaraq müəyyənləşdirməlidir.

Reakt tərtibatçısına tətbiqiniz üçün kök komponentinin nə olduğunu izah etmək üçün __optimizeReactComponentTree (MyRootReactComponent) adlı prepack qlobal funksiyasından istifadə etməlisiniz. Məsələn, qaynaq kodunuzda (qablaşdırmadan və qablaşdırmaya vermədən əvvəl) aşağıdakıları edə bilərsiniz:

// MyComponent.js
idxal Reaksiya 'reaksiya';
sinif MyComponent React.Component {genişləndirir
  göstər () {
    qayıt  Salam dünya! ;
  }
}
// __optimizeReactComponentTree yalnız Prepack'ə məlumdur
// beləliklə kod hələ də işlədiyi üçün onu şərti olaraq sarırıq
// Prpeack olmadan yerli inkişaf testi üçün
əgər (qlobal .__ optimizeReactComponentTree) {
  __optimizeReactComponentTree (MyComponent);
}
modul.exports = MyComponent;

Virtual DOM-u manipulyasiya edən JavaScript koduna reaksiya verir. Angular DOM-u birbaşa manipulyasiya edən JavaScript kodunu tərtib edir. Həm açı, həm də kod səviyyəsində heç bir dərin anlayış yoxdur. Növbəti blogumda daha çox araşdırma aparaq. :)