React Native Versus iOS and Android Native Development
React Native has gained popularity among developers to develop cross-platform applications that work on both iOS and Android. This document will evaluate the pros and cons of using React Native and provide some use cases.
React Native Pros:
- Enables transformation of the codebase or part of it between different mobile platforms. This is a substantial impact as compared to developing another native application from scratch, i.e. a 30% reusable codebase can save 30% development time.
- Smaller team required compared to having separate teams for iOS and Android development. This is minimal for projects with complex UI and high background processing, iOS and Android native application developers are still needed although team size can decrease.
- Saves time and money depending on the application’s requirement and complexity. For applications with simple UI and a highly reusable codebase, there can be a substantial time and money savings. For applications with a complex UI, this would not be the case.
- Hot reloading – keeps application running while releasing new versions containing UI changes. Application does not require a reload of the entire application and the user does not lose state.
React Native Cons:
- It isn’t well-suited to CPU-intensive applications. Trying to substitute React Native where a truly native application is needed leads to performance issues and results in a degraded user experience.
- For complex applications with complex user interfaces, React Native code hinders application performance compared to native modules. Applications with high user interactions require heavy background processes. For example, a messaging application or media player has better performance if developed using native modules.
- Lacks custom modules. Despite its popularity, React Native still lacks some custom components that are specific to each platform. The development team has to come up with their own solution and use native modules if React Native doesn’t provide the necessary modules to satisfy the application function. That means iOS and Android developers are still necessary.
- React Native is a relatively new framework and is still getting updated frequently, so it is more difficult to research a solution if the development team encounters any issues while developing the application. Troubleshooting can be more problematic since native IDE’s have a lot of great debugging features that React Native does not have.
- Increased application maintenance time and cost. React Native is a rapidly changing framework and new versions are released monthly. It is best to regularly update to the latest version of React Native so that the application can benefit from the new features and improvements to speed. Going more than a few months without upgrading can result in a painful process. If it is recommended to do an upgrade after reviewing release notes and reviewing libraries, then an upgrade effort will need to be scheduled along with making necessary changes to the codebase.
- Size – React Native applications are bigger than native applications so there could be a negative impact, especially for users that have older or economy model devices.
Cross-platform development is a hot topic in the software world. Hybrid solutions are closer than they have ever been before but they still cannot compare to the performance and reliability of native applications. The number one drawback to React Native is performance since there’s no getting around the large overhead framework that slows down performance when measured against native applications.
When used for an application that plays to its strengths, React Native is a great choice since it enables faster development, more responsive update cycles, and the “native UI” feel that consumers respond to. When used outside its strengths, React Native adds an unnecessary layer of complexity and can lead to a large, convoluted, hard to manage codebase.
The choice to develop an application using React Native or native should be thoroughly discussed on a per-project basis. There are a number of significant implications to consider that influence this decision. As a general rule, it should be considered for projects where user experience and budget are equally important and when development speed is critical. It should be ruled out for applications that are expected to be CPU-intensive or have complex user interfaces.
- React Native Showcase – https://facebook.github.io/react-native/showcase.html
- AirBnB’s React Native Journey – https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c
- Udacity’s React Native Retrospective – https://engineering.udacity.com/react-native-a-retrospective-from-the-mobile-engineering-team-at-udacity-89975d6a8102
- Snipe’s React Native Journey – https://medium.com/snipe-gg/should-you-use-react-native-to-build-your-startups-mobile-app-c0baf9f4d9ad