Xamarin vs Vue/React Native

0

W ramach technologii mobilnych na studiach mam wykonać niezbyt duży projekt -aplikacja zdrowotna, zbierająca kilka podstawowych danych i generująca statystyki. No i teraz mam dylemat. Mamy dowolny wybór w doborze technologii. Jedyny wymóg to że aplikacja ma być na smartphone'a. Może, ale nie musi być wieloplatformowa. Waham się trochę co wybrać. Liznąłem bardzo krótko Xamarin jakieś 3 lata temu, na codzień pracuje zarówno w C# jak i JS (React.js) a ostatnio w wolnym czasie ogarniam Vue.js. Ze względu na natłok pracy oraz obowiązki domowe nie mam czasu na naukę kompletnie nowych technologii (a chciałbym nauczyć się np. Kotlin) więc wybór padł na w/w Xamarin lub React/Vue (prawdopodobnie Vue).

Stąd też moja prośba do osób które pracują/pracowały z jedną lub obiema technologiami. Co w nich lubicie/nie lubicie, ewentualnie co Wy byście wybrali i dla czego?

Dodam tylko że początkowo mam zamiar celować tylko w Android, więc w przypadku Xamarin UI robilbym "natywne" pod ten system, a nie w Xamarin.Forms.

1

Pracuję teraz trochę z Xamarinem (aczkolwiek Forms) i nawet go polubiłem, ale jest trochę powolny (start aplikacji jest dziwnie długi - Xamarin.Android nie ma tego problemu, podobno), czasami ma błędy, które biorą się niezbyt wiadomo skąd (pomaga np. przeładowanie projektu albo clean/rebuild) a dzisiaj dobrą godzinę spędziłem nad problemem wyjątku, który nie miał żadnego stacktrace i nie byłem w stanie wyśledzić skąd się bierze. Sama kompilacja i wdrażanie na urządzenie też trochę zajmuje i jest odczuwalny brak hot reload, który chyba jest w ReactNative (aczkolwiek tutaj pomaga Xamarin Live Player). Za to przenośność kodu/bibliotek pomiędzy backendem (w moim przypadku ASP.NET Core) i aplikacją mobilną (i między platformami) rekompensuje sporo.

No i pisze się w C#, a nie w JS i jest to przewaga olbrzymia :P

0

Mnie zastanawia jak chciałbyś zrealizować aplikację mobilną w Vue? Mógłbyś ewentualnie to zrobić jako PWA, ale nie kojarze żadnej technologi, która by kompilowała to do natywnego kodu albo by miała własny silnik i korzystała z Vue.

Możesz zawsze spróbować zrobić Kotlin + React Native, bo jest to możliwe i byłoby na pewno ciekawym doświadczeniem. Sam język do nauki nie jest skomplikowany, jak już umiesz programować, a Reacta już znasz.

0

@Michał Sikora: zaznaczam że mówiłem o Vue Native, a nie "czystym" Vue. Vue Native jest transpilowane(?) do React Native.

2
Michał Sikora napisał(a):

Mnie zastanawia jak chciałbyś zrealizować aplikację mobilną w Vue?

Na przykład tak? https://www.nativescript.org/
Poznałem kilka dni temu (akurat ja w Angularze) i póki co wygląda bardzo obiecująco. Właśnie jestem w trakcie pisania testowej apki celem nauki i obczajenia, czy "to jest to".

0
Marooned napisał(a):

Praktycznie tak samo śmiga react-native, więc w tym wypadku to nie alternatywa. Obok siedzi jeszcze Flutter. Alternatywy są generalnie dwie: całkowicie natywna apka (Java, Kotlin, Objective-C) albo webowa (Codrova, Ionic).

Chyba nie zrozumieliśmy się - w dobie alternatyw do natywnych aplikacji - czyli miałem na myśli, że NativeScript jest alternatywą do typowej, natywnej apki w Javie albo w Objective-C. Flutter działa trochę inaczej niż RN, bo jest kompilowany do ARMowego kodu, który jest uruchamiany na silniku Fluttera. Natomiast Kotlin jest jeszcze w innym miejscu, bo jest kompilowany do bajtkodu na Androidzie/backendzie, do kodu natywnego na iOS i do któregoś standardu ECMA dla webówki, więc też można współdzielić dużo kodu między platformami. Są też nawet eksperymenty typu Swift na Androidzie, ale to bardziej dla zabawy.

2

@Aventus - daj znać co wybrałeś, jak się sprawdziło etc.

0

Podczas pisania aplikacji na xamarina (xamarin.android) miałem sporo problemów wymienionych w tym temacie:
https://forums.xamarin.com/discussion/89286/xamarin-sucks-lessons-learned-from-weeks-wasted

2

flutter.io

0

Pisałem aplikację w React Native. Prosty kod na wysuwany panel zacinał, serwer musiał być restartowany co kilkanaście sekund. A większość sensownych bibliotek i tak musiała być implementowana w javie.

Ja podziękuję, może niektórzy piszą nałogowo w Js i lubią sobie napisać jakąś prosta apke w React native, jednak jeśli to jest jakikolwiek poważny projekt to tylko Java i Android Studio.

0

Instagram, AirBnb czy Pintreset działają sprawnie, mimo że wykorzystują React Native. Aplikacja roku 2018, Drops, jest napisana w React Native, również działa sprawnie i jest raczej poważną aplikacją. Myślę, że React Native nie ma dużego wpływu na wydajność w większości aplikacji.

1

AirBnB olało Reacta. W czerwcu ubiegłego roku to ogłosili.
https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a

0

I zrobili to z zupełnie innych powodów niż wydajność.

1

Dokładnie. Uważam że React Native jest dobry do małych projektów, ewentualnie jakichś testów ponieważ ktoś kto ogarnia dobrze Reacta to w React Native napiszę bardzo szybko apke. Ale wszystko ma swoją cenę i jest nią wydajność.

0

Na pewno mówimy o tym samym frameworku? React Native ma jakiś wpływ na wydajność, ale nie jest on znaczący w większości przypadków. Podlinkowany artykuł od AirBnb to potwierdza, zastosowanie React Native przez dużych graczy to potwierdza, nagrody dla aplikacji napisanych w React Native to potwierdzają, moje chałturnicze zabawy z React Native też to potwierdzają. Ma on oczywiście swoje wady i sam za React Native nie przepadam, bo widzę lepsze rozwiązania dla wielu platform, ale argumenty o spadkach wydajności są nieuzasadnione.

1
Michał Sikora napisał(a):

I zrobili to z zupełnie innych powodów niż wydajność.

Napisałeś, że używają więc sprostowałem bo nie używają.

W podlinkowanym przez mnie artykule narzekają na wydajność pewnych elementów.
"However, some technical challenges such as initialization and the async first render made meeting certain goals challenging."
Z artykułu podlinkowanego do tego dodanego przeze mnie:
"However, the initialization and first-render time (outlined below) made React Native perform poorly for launch screens, deeplinks, and increased the TTI time while navigating between screens."
https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838

0

Niczego nie sprostowałeś, bo React Native dalej jest w ich aplikacji. Nie wywalili nagle całego kodu, który mieli napisany w React Native. A tekst, który cytujesz, jest w sekcji What Worked Well, więc nie mieli problemów z wydajnością. Po prostu kilka rzeczy ucierpiałoby na wydajności i tam ograniczali React Native.

4

Główną wadą Xamarina / RN jest to, że oba frameworki bazują pod spodem na natywnym UI, a same w sobie są taką jakby abstrakcją. Dlatego zawsze będą do tyłu względem natywnego UI. Poza tym ilość występujących bugów jest potrójna: bugi z iOSa, bugi z Androida oraz bugi z Xamarina/RN.

Osobiście polecam Fluttera. Problem który opisałem jest mocno zredukowany bo Flutter renderuje każdy piksel. Oczywiście abstrakcja jest nadal potrzebna żeby np. obsłużyć GPS, ale da się z tym żyć.

6

Jest wydajność, i jest wydajność. Kilka tygodni z React Native rozczarowało mnie gorzko, boleśnie i na wielu poziomach. Lepiej rzeźbiło się w Xamarinie trzy lata temu (inna sprawa, że rozwój tej platformy w międzyczasie trochę zdaje się zamarł).

W Reakcie wciąż tajemnicze błędy konfiguracyjne, co drugi upgrade wywala builda, przez pół dnia guglowanie przyczyn różnych tajemniczych zjawisk, aż znajdujemy zbawienne wyjaśnienie w rodzaju: "no tak, jeśli jest TypeScript i używasz skróconej notacji dla lambd w pliku który ma ponad 150 linii, to breakpointy mogą nie działać" :) Wsparcie dla testowania też jest w takim stanie, że można osiwieć.

Co się czegoś nie dotknę, to nie działa, albo zawodzi w jakichś duperelach. Chcesz dodać możliwość share'owania obrazka? No fajnie - to się okazuje, że API React Native przewiduje możliwość udostępnienia pliku przez url (albo jako base64) tylko dla iOS. Na Androida możesz sobie zshare'ować tylko tekstowy komunikat. Vide: https://facebook.github.io/react-native/docs/share - a przypominam, ta platforma ma już 5 lat.

Żeby mimo wszystko zshare'ować plik, musisz dodać osobną bibliotekę (utrzymywaną przez społeczność) pt. react-native-share. I oczywiście znowu potknięcia, bo po "automatycznej instalacji" tego pakietu React w ścieżce dodanej do settings.gradle użyje ukośników wstecznych, zamiast normalnych, bez żadnych znaków ucieczkowych. I build się wychrzania, i trzeba to ręcznie poprawiać. I tak przez cały czas, wszędzie jakieś niedoróbki. Oczywiście natywne platformy też nie są od nich wolne, ale jednak nie wpada się na nie co krok, i to przy robieniu najprostszych rzeczy. Tu poziom stabilności oceniłbym jako alfę, i to taką bez szału.

Tak że wrażenie, jak to wrażenie - subiektywne... jednak dla mnie jedna z najmniej przyjemnych platform, z jakimi się dotąd zetknąłem. Jak zaznaczyłem, wypuszczona 5 lat temu - a odczucie jest takie, jakby miała 5 miesięcy. No, może wtedy przynajmniej nie byłoby tony nieaktualnych tutoriali i artykułów zalegających w necie. Bo zmiany rozwojowe były na tyle burzliwe, że przed zapoznaniem się z jakimś materiałem warto krytycznie zerknąć nie tylko na rok, ale i miesiąc publikacji.

Flutter jest na górze mojej listy technologii do sprawdzenia. Na początek wygląda obiecująco (w każdym razie względem RN) pod dwoma względami: a) Dart, chociaż to nie Kotlin, jest jednak sympatyczniejszym językiem niż JS, b) oficjalna dokumentacja wydaje się porządniejsza i bardziej dogłębna.

2

Podbijam wątek w kwestii wydajności.
Jako, że pracuję dużo w RN zwrócę uwagę na dwa fakty;

  1. Wydajność, nawet niezauważalna dla użytkownika w płynności aplikacji MA ZNACZENIE, bo przekłada się na zużycie baterii i temperaturę urządzenia. Gdyby nie ten przykry wątek ludzie pisaliby biznesowe apki, np. w unrealu, czy unity, bo one też mogą być płynne (mieć 60 fps), ale wykonują nadmiarowe obliczenia.
  2. Aplikacja pisana w RN MOŻE BYĆ prawie tak wydajna, jak pisana w natywne, ALE NIE MUSI. Wymaga to pracy i wiedzy. Bez tego RN będzie bez sensu renderował milion komponentów, ergo to co w natywkach jest "out of box", w RN wymaga dużej wiedzy, bez której łatwo zabić wydajność aplikacji, szczególnie w nietypowych UI/zastosowaniach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1