Our great sponsors
-
SurveyJS
Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
However, RN has still a lack of binary support. Unlike NodeJS, RN doesn't come with native modules for dealing with binary data out of the box, like crypto and Buffer. When it comes to processing binary data, calculating a digest hash like SHA-1 and MD5 and converting from/to hex and base64 are popular tasks. To accomplish those tasks, you have to use JavaScript libraries like spark-md5 and buffer. If you need crypto module, you have to install rn-nodeify and a bunch of polyfill libraries, which eventually messes up your project and makes it hard to maintain. So, implementing the end-to-end encryption in React Native has been a big challenge for me.
Unfortunately, the community is not interested in solving it.
This issue forces me to escape \0 characters to store blob data in my module called react-native-sqlite-2 like this:
As you can see above, the JS app just invokes native functions. Decrypting data is performed in my native module called react-native-aes-gcm-crypto, written in Kotlin and Swift.
react-native-quick-md5 10x faster on iOS and 8x faster on Android
react-native-quick-base64 4x faster on iOS
The React Native community is not focusing on providing solid APIs for binary data, unlike NodeJS. They are working on improving it as a front-end framework instead. And they would rely on extensions for other things like platform-dependent features. There is a project called nodejs-mobile which allows you to integrate NodeJS into your app. While it'd be fun for hobby projects, it's scary to rely on such a minor framework for my app focusing on its longevity. In fact, this library looks inactive these days.
Eh, performance? Yeah, React Native is basically performant. But, React Native takes care of the rendering only. Everything you know about React performance will apply in a React Native application. React Native is also trying to improve launch speed by building their own JavaScript engine called Hermes. So, the rendering is usually fine.