Odsyłałem do tej dokumentacji i natrafiłem na koncepcję kompilacji. Można użyć kompilacji JIT lub AOT. Jednak wydało mi się to bardzo krótkie i muszę szczegółowo poznać następujące punkty,
- Różnice między tymi dwiema technikami
- Zalecenie, kiedy używać czego
angular
compilation
Gaurang Patel
źródło
źródło
Chociaż jest kilka odpowiedzi, ale chciałbym również dodać niektóre z moich ustaleń, ponieważ byłem naprawdę zdezorientowany tym, co faktycznie jest kompilowane, tak jak we wszystkich przypadkach
TS
-> następujeJS
konwersja. Jako punkt odniesienia biorę paragraf z bloga Jeffa .JIT
TS
Kod napisany przez programistę jest kompilowany doJS
kodu. Teraz ten skompilowanyjs
kod jest ponownie kompilowany przez przeglądarkę, dzięki czemuhtml
może być renderowany dynamicznie zgodnie z działaniem użytkownika, a odpowiednio kodyangular
(dla komponentów, wykrywania zmian, wstrzykiwania zależności) są również generowane w czasie wykonywania.(Kompilator przeglądarki jest tym, co pobiera dyrektywy i komponenty aplikacji wraz z odpowiadającymi im kodami HTML i CSS i tworzy fabryki komponentów, aby szybko stłumić instancje z całą ich logiką tworzenia widoku).
AOT
TS
Kod napisany przez programistę jest kompilowany doJS
kodu, tojs
już zostało skompilowane dla kanciasty jak dobrze . Teraz ten skompilowanyjs
kod jest ponownie kompilowany przez przeglądarkę, abyhtml
można było renderować. Ale haczyk polega na tym, że kompilatorangular
zadbał już o funkcje,AOT
a zatem przeglądarka nie musi się zbytnio martwić o tworzenie komponentów, wykrywanie zmian, wstrzykiwanie zależności. Więc mamy :Dzięki AOT przeglądarka pobiera wstępnie skompilowaną wersję aplikacji. Przeglądarka ładuje kod wykonywalny, dzięki czemu może natychmiast wyrenderować aplikację, bez konieczności uprzedniego skompilowania aplikacji.
Kompilator wbudowuje zewnętrzne szablony HTML i arkusze stylów CSS w JavaScript aplikacji, eliminując oddzielne żądania ajax dla tych plików źródłowych.
Nie ma potrzeby pobierania kompilatora Angular, jeśli aplikacja jest już skompilowana. Kompilator to mniej więcej połowa samego Angulara, więc pominięcie go radykalnie zmniejsza obciążenie aplikacji.
Kompilator AOT wykrywa i raportuje błędy powiązań szablonu na etapie kompilacji, zanim użytkownicy będą mogli je zobaczyć.
AOT kompiluje szablony i komponenty HTML do plików JavaScript na długo przed udostępnieniem ich klientowi. Brak szablonów do odczytania i ryzykowna ocena kodu HTML lub JavaScript po stronie klienta oznacza mniej okazji do ataków typu iniekcja.
Pozostałe różnice omówiono już w punktach Benyamin, Nisar i Gaurang.
Zapraszam do poprawiania mnie
źródło
Beniamin i Nisar wymienili tutaj kilka dobrych punktów. Dodam do tego.
Chociaż teoretycznie AOT wygląda atrakcyjnie niż JIT do celów produkcyjnych, miałem wątpliwości, czy AOT naprawdę jest tego warty!
Cóż, znalazłem fajne statystyki Jeffa Crossa i to udowadnia, że AOT znacznie skraca czas ładowania aplikacji. Poniżej fotka z posta Jeffa Crossa da Ci szybki obraz tego,
źródło
Kompilacja JiT (Just in Time)
Sama nazwa opisuje działanie, kompiluje kod w momencie ładowania strony w przeglądarce. Przeglądarka pobierze kompilator, zbuduje kod aplikacji i wyrenderuje go.
Będzie dobre dla środowiska programistycznego.
Kompilacja AoT (Ahead of Time)
Kompiluje cały kod w momencie tworzenia aplikacji. Dlatego przeglądarka nie chce pobierać kompilatora i kompilować kodu. W tej metodzie przeglądarka może łatwo wyrenderować aplikację, po prostu ładując już skompilowany kod.
Może być używany w środowisku produkcyjnym
Możemy porównać kompilację JiT i AoT jak poniżej
źródło
JIT (kompilacja Just-in-Time)
Just-in-Time (JIT) to typ kompilacji, który kompiluje aplikację w przeglądarce w czasie wykonywania.
AOT (kompilacja wyprzedzająca)
Ahead-of-Time (AOT) to typ kompilacji, który kompiluje aplikację w czasie kompilacji.
źródło
Pod koniec dnia AOT (Ahead-of-Time) i JIT (Just-in-Time) robią to samo. Obaj kompilują Twój kod Angular, aby mógł działać w natywnym środowisku (czyli w przeglądarce). Kluczowa różnica polega na tym, kiedy następuje kompilacja. Dzięki AOT Twój kod jest kompilowany przed pobraniem aplikacji w przeglądarce. Dzięki JIT kod jest kompilowany w przeglądarce w czasie wykonywania.
Oto porównanie:
Korzyści z AOT:
źródło
W rzeczywistości jest tylko jeden kompilator Angular. Różnica między AOT i JIT jest kwestią czasu i narzędzi. W przypadku AOT kompilator jest uruchamiany raz w czasie kompilacji przy użyciu jednego zestawu bibliotek; z JIT jest uruchamiany za każdym razem dla każdego użytkownika w czasie wykonywania przy użyciu innego zestawu bibliotek.
źródło
Kompilator JIT, którego używamy podczas tworzenia projektu kątowego. W tej kompilacji (konwersja TS do JS) ma miejsce w czasie wykonywania aplikacji. Podczas gdy AOT jest używany podczas budowania kodu aplikacji do wdrożenia aplikacji w środowisku produkcyjnym, tym razem tworzymy kod aplikacji za pomocą polecenia ng build --prod, które generuje folder o nazwie webpack, webpack zawiera pakiet wszystkich plików (HTML , CSS i maszynopis) w skompresowanym formacie javascript.
Rozmiar folderu webpack wygenerowanego dla produkcji jest znacznie mniejszy niż folder wygenerowany dla środowiska programistycznego (za pomocą polecenia ... ng build), ponieważ nie zawiera kompilatora w folderze webpack, poprawia wydajność aplikacji .
źródło