Kilka tygodni temu wypuszczona została oficjalnie ostateczna wersja frameworka Angular 2. Ja osobiście jestem fanem React ale jako front-end developer jestem zainteresowany wszystkimi nowościami w świecie web developmentu. Mogłeś to zresztą zauważyć jeśli śledzisz mojego anglojęzycznego bloga. Pisałem tam między innymi o nowościach w Angular 2. W związku z tym wszystkim postanowiłem napisać artykuł Angular 2 vs React, ale nie będzie to takie klasyczne porównanie tych dwóch technologii. Jeśli chcesz więc chcesz najpierw sprawdzić jakie są podobieństwa i różnice pomiędzy nimi to zapraszam do zapoznania się z moim artykułem “React vs Angular 2 - compare the incomparable?”, który opublikowałem swego czasu na blogu firmy ScalaC.

No dobra, skoro więc nie będzie to takie klasyczne porównanie, to po co jest ten wpis? Otóż uważam, że skoro Angular 2 jest już w wersji finalnej to warto by było zastanowić się nad przyszłością tych dwóch technologii. W końcu React był w ostatnich latach najbardziej “na topie”. Pierwsza wersja Angulara była na tym topie przed Reactem. Czy w takim razie Angular 2 ma szansę stać się równie popularny jak jego pierwsza wersja? Czy React może stracić pozycję lidera?

I jeszcze zanim przejdę dalej, mała uwaga. W moich rozważaniach, pisząc React mam na myśli cały jego ekosystem, najczęściej z jakąś implementacją Flux, react-router’em itd. (wiem, że React sam w sobie to tylko biblioteka i że patrząc na nią w tym kontekście rozwiązuje ona zupełnie inny problem niż framework Angular 2). Ponadto proszę pamiętać, że wszystko to co poniżej, to tylko moje prywatne zdanie. Każdy ma prawo mieć swoje ;)

Historia

Jak to zwykle bywa, możemy wiele przewidzieć w obecnej sytuacji analizując historię. W przeszłości było całe mnóstwo różnych frameworków JavaScript. Właściwie co rok, dwa mieliśmy nowego lidera. W internetach znaleźć można nawet memy a ten temat:

historia frameworków JS

Źródło: http://blog.bitovi.com/longevity-or-lack-thereof-in-javascript-frameworks/

No dobra, ale jakie są podobieństwa pomiędzy tymi “najgorętszymi” frameworkami? Wydaje mi się, że przed erą Reacta, każdy nowy framework był trochę rozwinięciem, ewolucją poprzednich. Dopiero pojawienie się Reacta wraz z jego ekosystemem było prawdziwą rewolucją. React dostarczył całkowicie inne podejście od tego co znaliśmy do tej pory… Virtual DOM, model komponentów, JSX, tylko “one-way” data binding. Wszystko to kompletnie odwróciło do góry nogami sposób w jaki budujemy teraz interfejsy użytkownika. A wszystko to działa bardzo szybko i wydajnie! Jak można było tego nie pokochać? :P

Teraźniejszość

I teraz oto, pojawia się Angular 2. Czy jest to rewolucja na miarę tej jaka miała miejsce wraz z pojawieniem się Reacta? Szczerze mówiąc… “nie wydaje mie sie”. Co prawda jest on także oparty o model komponentów ale tworzenie tychże wydaje się być bardziej skomplikowane. Trzeba używać jakichś brzydkich dekoratorów. To co jeszcze jest, moim zdaniem, “brzydkie” to sposób definiowania szablonów HTML jako “string” albo w osobnym pliku. W porównaniu do składni JSX z Reacta (której nota bene na początku nie lubiłem, po przesiadce z Angulara 1.5) taki podział na kod JavaScript i osobny plik z HTML jest dużo mniej wygodny. I jeszcze te dziwnie wyglądające angularowe atrybuty, z których utkane są te szablony HTML…

Ok, przyznaję… Angular 2, tak samo jak jego poprzednik jest pełnym, wypasionym frameworkiem, w którym przewidziano praktycznie wszystko co potrzeba (nie ma chyba odpowiednika angielskiego słowa “opinionated” w języku polskim?). Dlatego też nie trzeba się zastanawiać jakiej biblioteki użyć do wywołań AJAX czy też do routingu. To jednak może być zarówno zaleta jak i wada… ;) Wolność wyboru bibliotek jest świetna ale też niebezpieczna jeśli zdecydujemy się na przykład na w taką, która nie jest dłużej wspierana.

Architektura

To co mi się do końca nie podoba to to, że architektura nowego Angulara, także jest “opinionated” i nie prezentuje się szczególnie wyrafinowanie:

architektura Angular 2

Źródło: https://angular.io/docs/ts/latest/guide/architecture.html

Osobiście bardzo podoba mi się podejście architektury Flux i jej implementacji w Redux. Ale w świecie React mamy więcej opcji. Na przykład MobX o którym ostatnio pisałem na moim blogu anglojęzycznym. Na szczęście, z tego co mi wiadomo, to z tych rozwiązań da się skorzystać również w Angular 2. Przynajmniej co jakiś czas migają mi przed oczami na twitterze linki do różnych blog postów na ten temat. Wiecie coś na ten temat? ;)

TypeScript

Ostatnia rzecz, o której chcę napisać w tym paragrafie to TypeScript. Jest on uważany za największą zaletę stosowania Angulara 2. Ja osobiście nie jestem jeszcze do końca przekonany czy rzeczywiście zawsze warto. Oczywiście znam zalety statycznej kontroli typów itd. Z drugiej strony zawsze uważałem, że wielką zaletą JavaScriptu jest jego elastyczność wynikająca właśnie z braku tej kontroli. Dlatego też moim skromnym zdaniem, stosowanie statycznej kontroli typów ma najwięcej sensu w dużych aplikacjach klasy enterprise. I to, moim zdaniam powoduje, że głównym “targetem” Angulara 2 są właśnie tego typu projekty (pewnie najlepiej żeby jeszcze na backendzie był C#). W takim środowisku myślę, że sprawdzi się on najlepiej.

Wielkie korporacje i społeczność

To co jest jeszcze istotne w moich rozważaniach to to, że zarówno React jak i Angular 2 zostały stworzone przez zespoły należące do największych światowych korporacji. Myślę, że to może nam dać pewność że będą one stale rozwijane. I to w sumie odróżnia je też od wszystkich wcześniejszych topowych frameworków.

Jestem pewien, że Google zrobi wiele by Angular 2 osiągnął podobny sukces jak jego poprzednik. Myślę też jednak, że Facebook zrobi to samo z Reactem. Obie te firmy na pewno nie chcą stracić prowadzenia, będą więc nadal rozwijać swoje produkty. Z korzyścią dla nas wszystkich ;) Poza tym, wokół Reacta mamy już na prawdę silną społeczność, a duża część społeczności skupionej wokół Angulara 1 płynnie przeskoczy do Angulara 2. A jak wiadomo, społeczności mają duże znaczenie w utrzymaniu popularności produktów.

Angular 2 vs React - podsumowanie

Czyli reasumując…. kto wyjdzie zwycięsko z rywalizacji Angular 2 vs React? Na podstawie tego wszystkiego co napisałem powyżej, najbardziej prawdopodobne wydaje mi się, że obie te technologie znajdą dla siebie miejsce na rynku. React utrzyma swoją pozycję świetnego narzędzia do tworzenia wydajnych aplikacji. Natomiast Angular 2 będzie lubiany przede wszystkim przez duże firmy pracujące nad dużymi projektami enterprise (szczególnie dzięki wsparciu i rekomendacji dla TypeScript).

Na pewno wypuszczenie Angulara 2 to duża rzecz i wiele osób na to czekało. Będzie on z pewnością świetnym frameworkiem jednak jak każdy inny (również React i jego “ekosystem”) ma swoje wady i zalety. Na razie wydaje mi się on bardziej skomplikowany przez co posiadać może większą barierę wejścia. Początkujący developerzy mogą więc preferować Reacta na starcie swojej kariery.

Na tę chwilę sądzę, że będziemy w najbliższych miesiącach obserwować dużo szumu na temat Angulara 2 ale React pozostanie na podium przez jeszcze długi czas. Pytanie tylko kto przejmie pierwsze miejsce w rywalizacji Angular 2 vs React?