Ionic vs Native vs Hybrid
I did a lot of research about that topic a few years ago.
Should I keep using Ionic? Should I switch to native apps? Should I start working with an hybrid framework like React Native or Xamarin?
After 5 years of working with Ionic daily, I feel pretty confident about the answer that I'm about to give you:
- Do as you want.
Wait... that's kind of anti-climatic... I guess that you were expecting something else...
So let's talk about Ionic and its limitations!
For those who wouldn't know (what are you doing here?!), Ionic is a set of tools used to build iOS and Android applications... by creating web apps.
With Ionic you'll just create a web app that is shipped as a mobile android/ios app.
Ionic just adds some tools to Angular/React :
- Android & iOS default styles and behaviors
- Android & iOS lookalike components (buttons, tabs, segments, animations, ...)
- Access to the phone capabilities, like location, datepicker, phone storage, ... (by using to Capacitor)
But in the end, it's just... a web app that looks like a mobile app.
As you can guess, it has some big big big big advantages:
- You just have to code in HTML/CSS/Typescript to create mobile apps, so no need to learn two languages
- You can create only 1 app that will work both on Android and iOS, no need to create and maintain two apps
- You have all the UI tools to create an app that looks like a native app
- You can transform your app into a PWA with one simple command
- You can share components between your mobile apps and your web apps
- It's fully documented, open-source, easy to use..
And all those points are... really amazing.
But it comes with two major drawbacks:
- Its performances. Even with almost-perfect code, your app will never be as fast as a hybrid/native app. And if you mess in your code, your users will see it really fast.
- Even if it looks like a native app, it tastes like a native app, it moves like a native app... it's not a native app. Meaning it will have different behaviours and renderings on Android / iOS.
So, if I consider all those points, I guess that the summary would be that for 95% of your needs, Ionic will be amazing enough.
You can create a fully working app doing whatever you want in just a few hours!
BUT there are two situations where you would want to avoid Ionic and prefer a native/hybrid solution :
- If you want the exact same custom theme and behaviour between your Android & iOS apps.
Each step in the opposite direction of the default Ionic Android/iOS design will make the development more complicated.
- If your app will do many costy things at the time, like using the geolocation while displaying a map with markers while calculating a speed while rendering checkpoints... you'll start to see bad performances, due the limitations of Ionic.
Ionic is amazing, but on the performances side, if your app is "complicated" and if your code is not perfect, your users will start to feel it in your app.
Of course it doesn't mean that Ionic won't work :
- You can implement a perfect custom theme that behaves the same on the two types of devices. But it will cost you more than it would in a native/hybrid environment.
- You can write some perfect code and fix all the performances issues with your code, but any mistake will be visible real fast.
In the end, for 95% of your needs, Ionic is an amazing technology.
But for those 5% giant app projects that want custom look and big performances, you might want to prefer native or hybrid frameworks.
Damn, I start to have flashback about C# vs C++ big talks. Time to go, hope it was helpful!