V Ackee s novými technologiemi pracujeme každý den. Je to jedna z věcí, kterou považujeme za naší největší přednost, a tak nám samozřejmě nemohl uniknout silný mediální nástup technologie React Native. Stejně tak nám bohužel neuniklo zjevné nepochopení některých vývojářů, jak k této technologii přistupovat. Následující tři články mají vyvrátit největší mýty o React Native (RN) a vysvětlit, že u této technologie nejde o to, jestli je dobrá nebo špatná, ale o to, na co a jak ji použít.

TL;DR

React Native je velice silná a slibná technologie, sami jsme ji použili na prototypování aplikací. Nicméně zatím je připravena na produkční využití jen v úzké skupině případů, jako jsou například malé aplikace o pár obrazovkách, které slouží především k zobrazování dat, případně pro použití uvnitř větší aplikace pouze pro konkrétní funkcionalitu.

react-native-logo

Důvod první: Verze 0.33

Aktuálně je React Native ve verzi 0.33 (v době psaní článku). A fakt, že se toto číslo změní několikrát do měsíce celkem jasně ukazuje, o jak mladou a nevyzrálou technologii se jedná. Nové verze se vydávají cca 1–2× do měsíce, což je na jedné straně známkou toho, že je vývoj RN aktivní, ale zároveň to dává najevo, že je vývoj této technologie stále bouřlivý a je nutné často opravovat chyby. Většinu chyb navíc opravuje komunita a ne Facebook, který je přitom autorem RN.

Důvod druhý: Jak využívá RN sám Facebook

Facebook stojí za React Native, takže byste možná čekali, že oficiální aplikace Facebooku budou ReactNative plné. Dávalo by to smysl, že? Ve skutečnosti sám Facebook ve svém pokusu zjistil, že RN je vhodný pro použití spíše v malých aplikacích a sám jej používá například jen na obrazovku s událostmi. Proč? Protože se jedná o jednoduchý příklad opakujícího se motivu. A to je přesně místo, kde se RN hodí. Navíc i Facebook samotný v článku popisuje, že nebylo úplně jednoduché to vyladit.

Důvod třetí: Ukázkové aplikace

Ukázkové aplikace vystavené na oficiálním webu naše závěry potvrzují. Najdeme zde pouze malé aplikace s jednoduchým uživatelským rozhraním a opakujícími se obrazovkami. Náhoda? Nemyslím si.

Důvod čtvrtý: RN není „napiš jednou, použij 3x“

U oficiálních ukázek ještě zůstaneme. 30 ze 41 aplikací zde uvedených jsou určené pouze pro jednu platformu, ze zbylých 11 jsou 4 přímo do Facebooku. Zřejmě tedy není tak jednoduché napsat kód jednou a rovnou ho poslat do App Store a na Google Play, jak horliví propagátoři RN s oblibou uvádějí.

Důvod pátý: Pomalé aplikace na low-end telefonech

Vzhledem k tomu, že React Native přístup staví na Javascriptu, který má nezanedbatelnou výpočetní režii, znamená to u datově nebo graficky náročnějích aplikací větší zatížení systémových prostředků telefonu, což zejména u levnějších přístrojů může znamenat pomalou aplikaci. Pak již platí jednoduchá rovnice: Sekající se aplikace = ztráta stávajících uživatelů = špatné hodnocení v App Store/Google Play = odrazení nových uživatelů. A jak sám Facebook ve výše zmíněném článku přiznává performance je jedním z problémů této technologie.

V příštím díle se podíváme na dalších 5 důvodů, proč (ne)používat React Native. Naší minisérii poté uzavřeme shrnutím přínosů nativního přístupů, tak jak jsme si jej ověřili z naší praxe.

8 KOMENTÁŘŮ:

  1. Zajímavé. Nakonec jsem přeci jen vše přečetl.. Zaujal mě pokles výkonu u RN a zkoumal jsem proč tomu tak je,.. Jen jedna otázka.. nezkoumali jste třeba NativeScript, který tu byl dávno před tím, než RN vůbec ohlásili a který je na tom s výkonem úplně někde jinde, právě díky threading modelu a díky marshallingu?

    Kromě výkonnostních problémů to odstraňuje i závislost na tom, až někdo vydá novější verzi s novou podporou api. Dík za odpověď.

    1. Moje odpoveď bude bohužel stručná, nezkoušeli. Ale přidám si to do nějakého TODO a aspoň poděkuji za to, že si dočetl článek dokonce 🙂

      1. Pokles vykonu telefónu je zrejme spôsobený nepochopením architektúry React na strane programatora. Odporučám pozrieť články porovnavajúce výkon čisto nativných a React aplikácií – rozdiely sú zanedbateľné 😉 Samozrejme ak programátor chápe ako React funguje..

        1. Díky za komentář, ano i to je jeden z dalších důvodů, které popisujeme dále. K dobré RN aplikaci patří i dobrý RN vývojář a takových je opravdu málo. Rozhodně méně než průměrných nativních vývojářů, kteří většinou stačí na to, aby byla aplikace plynulá. p.s. když už zde zmiňujete benchmarky, které zobrazují zanedbatelné rozdíly bylo by fajn je nalinkovat. mějte se 🙂

  2. No neviem, dost hejtersky clanok podla mna, clanok na FB hovori jasne o tom, ake problemy riesili ked si to nasadili do vlastnej appky a ako ich vyriesili a benefitoval z toho cely framework.

    1. Ano a kolik vývojářů má Facebook? s tím se žádná klasická app-dev firma nemůže srovnávat to že jim to ve výsledku pomohlo je fajn, ale ten čas který tomu věnovali byl enormní. Jsou to technologičtí průkopníci mohou si to dovolit ostatní firmy jako naši klienti nikoliv.

  3. Zdravím, mám zkušenosti s nativním vývojem pro iOS (Objective C i Swift) i Android a nyní využívám především React Native. Tento i předchozí článek jsem si přečetl a musím Vám oponovat. Díky tomu, že je váš článek umístěn při hledaní “React Native” v ČR hned na začátku, může dost lidí od RN odradit což je myslím velká škoda.

    Začnu například u tvrzení z prvního článku, že “React Native přístup staví na Javascriptu, který má nezanedbatelnou výpočetní režii, znamená to u datově nebo graficky náročnějích aplikací větší zatížení systémových prostředků telefonu …”, zde bych Vás rád odkázal např. na tento článek [1], kde je srovnání výkonu aplikace ve Swiftu a stejně pak v React Native a kde React Native vyhrává ve 3 případech a Swift naopak pouze v 1.V otázce využití paměti React Native dokonce vyhrává docela citelně. Ve vašem druhém článku své tvrzení ještě rozšiřujete a tvrdíte, že “Na high-end telefonech bohužel není situace o mnoho lepší. JavaScript je totiž jednovláknová technologie, což znamená, že nemůže výpočty provádět paralelně.”. Nevím jak jste na něco takového přišel a myslím, že toto tvrzení [1] také vyvrací.

    Další Vaše tvrzení: “Zřejmě tedy není tak jednoduché napsat kód jednou …” také není tak úplně pravda, což můžu potvrdit z vlastní zkušenosti. Právě nyní dokončují aplikací v React Native, kterou jsem celou převážně testoval jen na iOS. Vzhledem k tomu, že by aplikace měla ve výsledku běžet i na Androidu zkusil jsem ji, připraven na to, že budu muset řešit vícero problémů než se mi jí podaří spustit i na Androidu. A světe div se aplikace se mi hned na první pokus na Androidu spustila a jediný problém, který jsem musel řešit byla rozdílná implementace zoomu u obrázku.

    Poté mě přímo bije do očí: “Důvod desátý: Úspěšné aplikace jsou nativní” proti tvrzení samotnému se nedá nic namítat ale vzhledem k tomu jak pokračujete z toho vyplývá, že React Native aplikace by snad neměly být nativní nýbrž hybridní, což je, když se kouknete na github stránku React Native [2] vyvráceno hned na začátku: “A React Native app is a real mobile app: With React Native, you don’t build a “mobile web app”, an “HTML5 app”, or a “hybrid app”. ”

    Nechci se více rozepisovat a proto reaguji jen na 3 z 10 bodů vašich dvou článků ale i o ostatních by se dalo diskutovat. Zběžně jsem koukal na vaše aplikace (jsou moc pěkné) a neviděl jsem tam nic co by nešlo vytvořit i s pomocí React Native. Pokud se při vývoji něco takového objeví tak není žádný problém to dopsat pomocí Swiftu/Obj C respektive Javy v případě Androidů a následně pak využít i v Javascriptu. Sám jsem to u jedné knihovny dělal a opravdu to není vůbec složité. Z mojí vlastní zkušenosti je vývoj s pomocí RN také rychlejší a sám už bych se asi k vývoji čistě jen ve Swiftu nebo Javě asi vracet nechtěl (hlavně díky deklarativnímu programování).

    [1] https://medium.com/the-react-native-log/comparing-the-performance-between-native-ios-swift-and-react-native-7b5490d363e2

    [2] https://github.com/facebook/react-native

    1. Dobrý den,

      Díky za komentář, článek je již staršího data, nechci se tu nyní flamovat. Přestože se mnoho věci vylepšilo, tak jak píšete, tak si za celkovým názorem na RN stojím. Nepochopte mě prosím špatně v RN experimentujeme a budeme vydávat naší první app postavenou kompletně na RN a vydáme o tom další blogpost. Nicméně nic to nemění na tom, že pro větší aplikace to stále považuji za risk ze strany investora (klienta) a to především kvůli závislostem a nejisté budoucnosti (to platí obecně pro všechny nadstavby) a veliké omezenosti a kvalifikaci lidských zdrojů. PRo vývojáře v FB a AirBnb je to super technické cvičení, pro agenturní činnost v drtivém případě spíše více problémů. Je to mnohem složitější problém, ale rád ho s Vámi proberu osobně pokud máte zájem, zvu Vás na kávu k nám do Karlína (napište mi na [email protected]) a muzeme to probrat.

      p.s. deklarativní programování nám díky sjednocenému Rx stacku nic neříká 🙂

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *