Powrót JavaScript

Gdybyście spytali mnie kilka lat temu o JavaScript, powiedziałbym, że to dobry dodatek do ulepszenia części wizualnej aplikacji, poprzez dodanie różnego rodzaju dynamicznych elementów do strony. Wtedy raczej nikt się nie spodziewał, że ten język skryptowy stanie się jednym z najpopularniejszych języków programowania. W 2009 roku nastąpiło wydarzenie, które było przełomem. A mianowicie, Ryan Dahl pracując nad wprowadzeniem technologii push do stron internetowych, do tego projektu wykorzystał właśnie JavaScript. Ta decyzja wpłynęła na powstanie Node.js, co z kolei było niezbędne by JavaScript zrewolucjonizowało tworzenie aplikacji webowych i mobilnych.

Śmiało można powiedzieć, że to jedyny język programowania, pozwalający tworzyć full-stack’owe aplikacje webowe z obsługą zarówno warstwy klienckiej (client-side) jak i serwerowej (server-side). Node.js pozwoliło developerom pójść o krok dalej i stworzyć frameworki takie jak AngularJs, ReactJs, czy też Vue.Js

Przykładowo z AngularJs stworzono pierwsze aplikacje działające na jednej stronie (single app) w oparciu o model MVW (Model-View-Whatever). Do gry weszli obecnie najwięksi w branży IT, czyli Google (AngularJs) i Facebook (Reactjs). W tej chwili w rankingu TIOBE Index w pierwszej dziewiątce najpopularniejszych języków do programowania znajduje się właśnie JavaScript i pnie się jeszcze wyżej.

Ranking najpopularniejszych języków programowania według TIOBE Index, Marzec 2018.

Według RedMonk JS plasuje się na pierwszym miejscu (czerwiec 2019) i pozycja ta utrzymuje się od 2014 roku, kiedy to w styczniu język ten zrzucił z pierwszej pozycji Jave.

Kodowanie aplikacji mobilnych w JavaScript? 

Od wielu lat rozmawiając z programistami słyszałem o możliwościach pisania aplikacji mobilnych przy wykorzystaniu jedynie  JavaScript, HTML i CSS.

Jednak nie widziałem w tym szansy na przełożenie tych rozwiązań na wydajność aplikacji. Wydawało się to też niepraktyczne w tworzeniu bardziej złożonych rozwiązań. W tamtym czasie moje obawy pokrywały się z rzeczywistością. Ale czy teraz dalej są aktualne? 

Zanim rozpoczniemy przegląd wszystkich możliwych rozwiązań pisania aplikacji mobilnych przez programistów, wprowadzę klasyfikację. Wyróżnić można 3 grupy rozwiązań tworzenia aplikacji mobilnych:

  • natywne (native)
  • w pełni natywne (full native) 
  • hybrydowe (hybrid) 

Full native

Java/Kotlin (Android) oraz Object-C/Swift (iOS) zaliczamy do pierwszej grupy w tworzeniu aplikacji mobilnych, gdzie komunikujemy się z urządzeniem w sposób w pełni natywny. Główną zaletą tego rozwiązania jest wysoka wydajność, przez co technologia ta jest wskazana przy pisaniu gier bądź aplikacji wymagających większych obciążeń i zasobów po stronie urządzenia. Natomiast główną wadą, przede wszystkim dla biznesu, jest bardzo wysoki koszt stworzenia i eksploatacji aplikacji. Nie wspominam tutaj o Windows Mobile, bo według mnie obecnie nie jest to już technologia, o której warto wspominać w moim wpisie.

Hybrid

Zapewne słyszeliście już o hybrydowym tworzeniu aplikacji mobilnych.  Głównym założeniem tego rozwiązania – dla aplikacji na urządzenia mobilne, jak i rozwiązań webowych – jest wykorzystanie JavaScript, HTML i CSS. Za widok odpowiada, podobnie jak przy stronach webowych, wbudowana w urządzenie przeglądarka (WebView). Natomiast do komunikacji z urządzeniem wykorzystywana jest Cordova. Najprościej rzecz ujmując jest to zwyczajnie API napisane w JavaScript, które pośredniczy między natywnym kodem aplikacji z uwzględnieniem spójności komunikacji z wszelkimi systemami urządzeń mobilnych (iOS, Android, Windows Mobile). Przykładowo frameworki takie jak Xamarin, PhoneGap i Iconic są wykorzystywane do implementacji hybrydowych aplikacji mobilnych. Największą wadą tego rodzaju technologii jest stabilność i wydajność stworzonych aplikacji (WebView jest tutaj słabym punktem dla tych kryteriów).

Jednak zaletami tego rozwiązania są niższy koszt stworzenia i eksploatacji oraz prostota w porównaniu do podejścia Full native.

Native

To nie przypadek, że o aplikacjach natywnych pisze się zazwyczaj na końcu. Jest tak gdyż to rozwiązanie łączy powyżej opisane, niwelując przy tym ich największe minusy. Głównymi frameworkami kreowania aplikacji natywnych są React Native (Facebook) i NativeScript (telerik). Obecnie do gry wszedł również Flutter, aczkolwiek jest to jeszcze dość młoda technologia w porównaniu do wcześniej wymienionych.

Historia tego rozwiązania ma dość krótką opowieść – sięga ledwie kilku lat wstecz i budzi spore emocje wśród developerów. Podobnie jak w podejściu hybrydowym aplikacje pisane są z użyciem HTML/XML, JavaScript i CSS/SASS. Różnica jest taka, że nie wykorzystuje się tutaj przeglądarki do renderowania widoku i obsługi zdarzeń. Aplikacja działa w pełni natywnie – efektem tego jest lepsza wydajność niż przy aplikacjach hybrydowych, a częstokroć przewyższa nawet te tworzone w full native (twierdzę tak na podstawie dostępnych benchmarków w Internecie). To podejście, podobnie jak podejście hybrydowe, jest dużo tańsze przy tworzeniu aplikacji mobilnej i w utrzymaniu niż aplikacje full native.

Jeśli chodzi o framework umożliwiający pisanie aplikacji w podejściu native, to jednym z najpopularniejszych rozwiązań jest React Native. To właśnie w nim stworzono aplikacje takie jak Facebook (obecnie już zmigrowany do full native), Instagram, Skype. Drugie z najpopularniejszych rozwiązań, a moim zdaniem bardzo perspektywicznym, jest framework NativeScript. Jest to framework open-source do tworzenia aplikacji mobilnych na systemy Apple iOS i Android.

Najciekawszym rozwiązaniem jest w nim to, że można pisać w czystym JavaScript, TypeScript, Angular bądź Vue.Js. Dodatkową zaletą jest to, że  nie musimy programować dodatkowych komponentów jak to zdarza się przy React Native. Dzięki temu mamy 100% dostęp do API urządzenia. Za React Native stoi ogromna firma i ogromne pieniądze, za NativeScript niesamowita społeczność. 

Co wybrać?

Przedstawione wyżej podejścia dają pewien pogląd na to jak wyglądają aktualne technologie tworzenia aplikacji mobilnych. Osobiście, jako Web Developer, skłaniam się w stronę tworzenia aplikacji w podejściu native. Tą technologię postrzegam jako najbardziej przyszłościową w tworzeniu aplikacji mobilnych, a sam od 2 lat tworzę aplikacje mobilne z NativeScript/Angular/TypeScript.

_______________________________________________________________________________

Marek Tenus – programista z ponad 15 letnim doświadczeniem w projektach komercyjnych. Obecnie CTO w firmie HighSolutions . Zaczynał od C/C++, a potem pracował kilka lat z Python i Ruby. Od początku związany z językiem PHP i JavaScript. Określa siebie jako Full-stak engineer, dlatego też lubi poznawać nowe technologie. Jego obecne pasje technologiczne to ML, NLP i rozwiązania chmurowe.