React Native vs. “Real” native

androidiosreact-native

I am working for the consumer oriented company which has mobile app as main product.

Our mobile app has 100K monthly active users and is developed using Cordova + Kendo Mobile + Telerik Appbuilder (which will be discontinued in couple of days). We are thinking about migrating our code to native solution (either real native or React Native).

Firstly I want to say that for us developing app for Cordova with Kendo Mobile has been hell.

This is mainly because of Kendo, but also because of dependency on various plugins (some of which were great, and others not so much – and you are left choice to either use plugin or write Native code and Cordova plugin for yourself).

Of course, the biggest issue is performance. And our app does not have some complicated calculations, or animations or anything similar, but difference when scrolling through infinite lists, or fast switching between screen is obvious. So we have spent a lot of time optimising (or even writing code from scratch) for stuff that we would get out of the box if we were native. And because of this we cannot easily estimate releases of new features and whole development process is slow.

From business perspective it would be better for us to go with React Native because we already have 3 JS developers and native devs are scarce and expensive.

On the other hand we are kinda traumatised from our whole experience with hybrid development and we are not sure is React Native really that good and mature as advertised, and we have no time for mistakes.

Our biggest fears are:

  • React native is hyped and when "next big thing" happens everyone will jump on that bandwagon (eg. Google Flutter)
  • Dependency on open-source plugins (which can be abandoned anytime)
  • Development is faster in theory (because majority of code is shared) but for app to truly look / feel native we will have to spend bunch of time on optimising various stuff and we will be much slower in the end
  • I have read in few articles that react native runs on iOS flawlessly but Android is another story – it is slower and there are quirks between various Android versions (eg. something works fine on 5.1.0 but not on 5.1.1)
  • Apple will change something. (like introduce notch) and it will take long time for us to adapt to change because of technology limitations

On top of my head here are few requirements that our app has, and I am not sure all of them are covered with React native properly:

  • Native feel while scrolling through infinite feed (feed is similar to one that FB has)
  • In-app purchases
  • Native audio and video playback
  • Background stopwatch
  • Internationalization
  • Deep linking
  • Analytics and Crash reporting system (like GA and Crashlytics)
  • SQLite or some other DB/Storage solution
  • Native like navigation between screens
  • Graphs & Charts (like D3.js has)

Your thoughts and experiences would be much appreciated!

Best Answer

I used to use Blomberg app as a sample of react native. You can check It if you need some proof of concept. It has infinite feeds and complicated UI. The scrolling and tabs switching is not so fast but still it does the job. And it would be harder to make all this UI using native development.

Right now we developing the project (which also has infinite feed) in native on Android and in React Native on iOS. We also spent some try to make react native version run on Android and compared two versions. The scrolling performance is comparable. React native has all app logic running on background thread so ui thread is free. Our android native app used UI thread much more.

Still native is a safe bet yet and if something goes wrong with performance you are sure that it can be fixed.

You have a lot of requirements and some native part of programming would also be required anyway.

Related Topic