6 mitów o React Native – nie wszystko złoto…
Karol Wegner
Technologia React Native coraz bardziej zyskuje na popularności wśród klientów jak i developerów. W ciągu relatywnie krótkiej, 4-letniej historii wokół React Native narosło kilka plotek i mitów, w które, choć zawierają ziarno prawdy, niekoniecznie należy ślepo wierzyć. Spójrzmy na najbardziej popularne stwierdzenia nt. tej technologii i spróbujmy rozwiać wątpliwości i wyklarować realne możliwości produkcji aplikacji z użyciem React Native
#1 Aplikacje mobilna Facebook i Instagram zostały napisane w React Native – nieprawda
Jedynie drobny moduł aplikacji Facebook został wykonany w technologii React Native, tak samo w aplikacji Instagram. Facebook wykorzystał ten fakt do promocji React Native, a od strony technicznej był to test nowej technologii. Facebook przetestował technologię React Native na module Zdarzeń w okolicy, oryginalnie jedynie dla aplikacji na platformę iOS. Technologia nie została zastosowana w żadnym z kluczowych modułów ich aplikacji mobilnej.
Również na https://www.instagram.com/about/jobs/ nie widać żadnych ogłoszeń o pracę dla inżynierów React Native, za to jest więcej niż kilka ogłoszeń o programistów technologii mobilnych Android oraz iOS. Wskazuje to na rozwój aplikacji w natywnych technologiach mobilnych.
#2 Jak zaczniesz pracować z React Native to nie chcesz już wracać do native development – nieprawda
Aplikacja Airbnb była wskazywana bardzo często jako success story użycia technologii React Native. Niestety dla fanów tej technologii w czerwcu 2018 roku na blogu prowadzonym przez inżynierów Airbnb została podana informacja, że postanowili wrócić do natywnego programowania aplikacji mobilnych i rozstają się z technologią React Native po prawie dwóch latach rozwoju tej technologii w ich organizacji.
Airbnb podaje, że decyzja związana była z technicznymi i organizacyjnymi problemami związanymi z użyciem technologii React Native w ich projektach. Więcej informacji można przeczytać bezpośrednio na https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a
#3 Praca z RN zmniejsza koszty realizacji projektu o 50% – nieprawda
Maksymalny poziom zmniejszenia kosztów jaki da się uzyskać to pewnie 20-25%, ale praktyka pokazuje, że bliższe prawdy jest, że zysk kosztowy jest bardzo niski, na poziomie 0-15%
Całkowity koszt realizacji aplikacji mobilnej wymaga wielu różnych kompetencji między innymi: ux design, ui design, analysis, project management, quality assurance, mobile application programming – native Android, native iOS or React Native.
W związku z tym, całkowite koszty związane z programowaniem stanowią zazwyczaj od 45 do 60% kosztów całego projektu – przyjmijmy w dalszych obliczeniach dla uproszczenia, że koszt developmentu to 50% kosztów całego projektu. Pozostałe 50% kosztów projektu będą stały niezależnie od technologii w jakiej stworzymy aplikację mobilną.
W takim razie, jeśli nawet koszt zredukowania 2 programistów (Android i iOS) do jednego programisty React Native redukuje koszt o 50% to i tak analizując cały koszt stworzenia aplikacji maksymalnie zostanie obniżony o 50% * 50% = 25%.
Pozostałe problemy z młodą technologią jaką jest React Native (na rynku od 2015 roku) i ogólnie złożonością koncepcji “cross-platform” powoduje, że realny zysk w koszcie realizacji projektu szacuje się na od 0 do 15%.
#4 React Native to kolejna platform do tworzenia aplikacji hybrydowych – nieprawda
Prezentowane ekrany i komponenty w aplikacji mobilnej napisanej w React Native są komponentami natywnymi ale obsługiwanymi z poziomu języka skryptowego. Natomiast aplikacje hybrydowe takie jak Cordova to tak naprawdę webview (okno przeglądarki) wewnątrz aplikacji mobilnej (HTML, CSS, JavaScript) rozszerzone o dostęp do niektórych sprzętowych funkcjonalności urządzenia.
React Native to cross-platformowe natywne rozwiązanie. Aplikacja z punktu widzenia mobilnego systemu operacyjnego nie różni się od innych aplikacji. Logika aplikacji jest zaimplementowana w JavaScript, ale ostatecznie jej wynik jest dostarczany do systemu operacyjnego. Obie platformy iOS i Android oferują programistom silnik JavaScript dzięki któremu mogą zlecić wykonanie kodu natywnego i otrzymać jego wynik.
#5 Programista, który zna programował aplikacje webowe w javascript, html i css, a jeszcze lepiej React.js szybko nauczy się programować w React Native – fałsz
Ludzie często mylą pojęcia – podobnie jest w przypadku technologii React Native, która to ma mało wspólnego aplikacjami webowymi oraz nie jest tym samym co React.js. Natomiast jeśli chodzi o szybkość nauki pisania w React Native to zależy to raczej od doświadczenia, indywidualnych predyspozycji danego inżyniera oraz jego chęci.
Programowanie aplikacji webowych i mobilnych jest podobne od strony technicznej, ale to nie to samo. Konstrukcja aplikacji mobilnych, integracja z wbudowanymi podzespołami i kontekst aplikacji jest zupełnie inny (aparat, gps, mikrofon, push notifications, system operacyjny Android/ iOS). W aplikacjach webowych kontekst zapewnia przeglądarka (różna na różnych urządzeniach) w aplikacjach mobilnych kontekst dostarcza system operacyjny najczęściej Android lub iOS. Znajomość tych dwóch systemów i różnic pomiędzy nimi jest niezbędna do prawidłowego oprogramowania aplikacji mobilnej w React Native.
Pozytywne jest to, że dla większości zastosowań komponenty napisane w React Native w zupełności wystarczają, rzadko zdarza się potrzeba napisania własnego komponentu natywnego w Android lub iOS.
#6 Wystarczy dowolny komputer i można programować aplikację w React Native na iOS oraz Android – fałsz
W praktyce najlepiej dysponować Apple mac lub Apple mac oraz Windows
Do zbudowania aplikacji na oba systemy Android i iOS potrzebne są oba środowiska – Android Studio oraz XCode. Android Studio można zainstalować na komputerach z systemem iOS – co oznacza, że Mac wystarczy do programowania aplikacji React Native i budowania jej na iOS oraz Android, ale użytkownicy systemów Windows/Linux, mogą tylko budować aplikacje na system Android, co jest dużą niedogodnością.
Aplikację trzeba przetestować na obu systemach, bo często zdarzają się różnice w działaniu aplikacji React Native na obu wyżej wymienionych systemach – co oznacza, że programista React Native powinien dysponować pełnym zestawem urządzeń mobilnych do testowania.