Wprowadzenie

Społeczność pracująca nad platformą wydała wersję 8 Angulara z imponującą liczbą zmian i ulepszeń. Do jednej z nadłużej wyczekiwanych należy kompilator Ivy, który może, ale nie musi być używany.

Kolejne istotne zmiany dotyczą Web Workers, Lazy Loading oraz ulepszenia narzędzia ngUpgrade, które pozwala na stopniowe przepisywanie kodu z AngularJS na Angular.

TypeScript 3.4

Angular 8 wspiera TypeScript 3.4 i jest wymagany do uruchomienia projektu – w przypadku zainstalowanej starszej wersji musisz dokonać aktualizacji. Nowością w tej wersji jest wprowadzenie flagi --incremental. Flaga ta informuje TypeScript o konieczności zapisywania informacji (w postaci drzewa) dotyczących zmian w projekcie. Dzięki użyciu tej flagi TypeScript będzie w stanie wprowadzać zmiany w projekcie w efektywny sposób.

Pliki TypeScript są kompilowalne – jest to krok pośredni pomiędzy pisaniem kodu a jego uruchomieniem. Jednym z celów firmy Microsoft było zminimalizowanie budowania projektu przy każdej jego zmianie. Stąd też pojawienie się takiej flagi. Opcje kompilatora można ustawić korzystając z poniższego wpisu w pliku tsconfig.json:

{
    "compilerOptions": {
        "incremental": true,
        "outDir": "./lib"
    },
    "include": ["./src"]
}

Web Workers

JavaScript jest językiem jednowątkowym. Skomplikowane zadania do których możemy zaliczyć pobieranie danych (nie mówimy tutaj o jednym zapytaniu) często odbywają się asynchronicznie. Web Workers ułatwia np. proces uruchamiania skomplikowanych obliczeń w wątku w tle, podczas gdy główny wątek będzie odpowiedzialny za aktualizację interfejsu użytkownika.

Web Workers mogą również pomóc w eliminacji sytuacji w których aplikacja “nie odpowiada" w trakcie przetwarzania danych.

Ivy oraz Bazel (wersje beta)

Wraz z pojawieniem się Angular 8 dostaliśmy możliwość przetesowania wersji beta Ivy. Jest to nowy silnik renderujący produkujący małe objętościowo pakiety. Bazel, z kolei, jest narzędziem do tworzenia aplikacji, które jest powszechnie używane przez Google. Głównymi zaletami Bazel jest możliwość tworzenia aplikacji front-end oraz back-end przy użyciu tego samego narzędzia oraz wyżej wspomniane wcześniej budowanie i testowanie inkrementalne, które mogą znacząco ograniczyć czas każdego budowania aplikacji po wprowadzeniu zmian.

Kompilator Ivy jest opcjonalny, jeżeli jednak chcemy go wypróbować musimy wykorzystać Angular CLI włączając odpowiednią konfigurację:

$ ng new angular-project --enable-ivy  
Warto zaznaczyć, że ma to być domyślnie używany silnik renderujący w wersji Angular 9.

Ulepszenia ngUpgrade

Migracja aplikacji napisanej w .NET Framework do najnowszej wersji .NET Core może stanowić wywanie. Większość zespołów nie ma czasu na przepisanie wszystkich funkcjonalności. Dlatego też w wielu dużych firmach można spotkać się z aplikacjami mającymi po kilkanaście lat, które wciąż są rozwijane i ulepszane. Kiedy już przychodzi czas na utworzenie całkowicie nowej aplikacji pewne osoby z zespołu są w gotowości jako support do naprawy błędów w wersji legacy - jest to aplikacja działająca (od lat) na produkcji.

Z podobną sytuacją możemy spotkać się w przypadku aplikacji napisanej w AngularJS. Jeżeli nasza aplikacja składa się z wielu komponentów, serwisów i widoków jej przepisanie może być niezwykle skomplikowanym procesem. Z pomocą przychodzi nam wcześniej wspomniane narzędzie ngUpgrade - pozwala nam na równoczesne uruchomienie każdej z aplikacji dostarczając funkcjonalności takie jak odpowiednie wersjonowanie komponentów czy specjalne dyrektywy, które będą mogły być wykorzystane w obu wersjach aplikacji.

Takie mieszanie/łączenie komponentów może pozwolić na stopniowe przepisywanie aplikacji bez konieczności rozdzielania produktów. Pracą nad rozwijaniem istniejących oraz dodawniem nowych funkcjonalności nie musi zakłucać cyklu życia obecnej aplikacji.