Announcing Ionic 2 Final
blog.ionic.io
blog.ionic.io
This was also our first experience with Angular. I really wanted to like Angular, but after more than a year of development, we left it for greener pastures. I understand that Angular 2/Ionic 2 are touted as being significantly better, but while all those improvements were being made, we invested our efforts in learning and building with Swift. I can say that we are delighted with the outcome and have no real inclination to leave it for an alternative.
The lack of any kind of commercial support is real and frankly that is the largest issue that you will have to deal with. I have searched high and low for any kind of commercial support that I can offer my customer. I am it. Or somebody like me.
However, I will say that in two years of using Ionic I have never had to modify one Cordova plug-in or any native code in order to release my apps. I do mess around with the native code sometimes but usually on an exploratory mission. Other than that, my biggest issue so far has been with how quickly ionic and Cordova get updated and how quickly my code gets out of date because of that. Then when I have to update I have to make sure that nothing breaks by writing all sorts of tests or doing manual testing yada yada yada. Also getting answers from support or anybody qualified is sometimes difficult and you have to wait days or just figure out your own work around.
The bigger issues were things like having access to leveraging background processes via Cordova. At last check, there was a plugin for backgrounding the app, but it came with a big, red warning that it may cause issues with Apple's App Store approval process.
Another issue was the dismal state of background geolocation. There is a commercial plugin; however, I found the maintenance schedule to be quite lacking. As well, the maintainer of the plugin was quite abrasive and impolite toward users raising valid issues.
Ionic 2 is much more performant and scales much better for app development than Ionic 1. I have yet to meet anyone who has not really enjoyed developing Ionic 2 apps. We take a tremendous amount of pride in the developer experience!
Native apps will always be a little faster but if you can get 60FPS either way, who cares? Ionic is easier to build apps with, and developing in the browser is a joy.
A huge advantage of Ionic is being able to deploy the same code base to the web as a PWA and to a phone natively as a cordova app. Soon Ionic Native will expand to support PWA and Electron, too, so it will truly be a write once run anywhere experience.
But the startup times are somewhat big. I'm talking, for the simplest of applications a startup time of ~5.5 seconds in ionic 2 (the beta) vs ~2 seconds in React Native in Android.
For me, that detail has a significant impact in usability.
Any plans to work on those startup times?
So start up time is something that we are very focused on at the moment. Especially on the PWA side of things, TTI (time to interactive) is exceedingly important to ensure a good user experience. We are working on a few things at the moment but most likely the first one to hit is gonna be code splitting. So with code splitting, instead of shipping just one big bundle you will be shipping smaller bundles that are lazy loaded based on routes. This means that when the app first loads only the first bundle for the first view in your app will have to be loaded, parsed etc and then the other bundles will be lazy loaded. With this setup the browser (or webview) will never have to parse and load a huge bundle all in once, it will instead only have to deal with smaller bundles. This should give a pretty big improvement as parsing javascript is slow in every browser. From my testing on a moto g each MB of JavaScript in an ideal situation takes about 2 seconds to be parsed, so reducing the amount of JavaScript the browser has to deal with is a very fast way to get better load times.
Devs are migrating en masse to react native. I have friends in several startups leaving their jobs because they've been tasked with maintaining legacy Ionic 1.x/Angular projects, while the codebases are migrated to react native...
For hacking quick MVPs is not bad, it was even cool 2 years ago, but for serious projects starting from zero, react native is a smarter choice.
Key point - for hybrid development. There are a lot of use cases where hybrid mobile apps are appropriate (CRUD). With ever more powerful devices, the argument for hybrid increases.
Personally, I've developed Ionic apps that integrate with Firebase, PushWoosh, Back& among others... You are free to choose. No lock in necessary.
It's better to not have such people working for you in the first place.
Maintaining existing software to focus on real business is just the kind of founders I'd want to work with. It's a part of being a part of a startup, and those who jump the ship too often do not leave any legacy behind.
Developers who jump because they'd rather build from scratch instead of helping maintain and improve an existing solution is irritating.
More power to them, but I respect developers a lot more who stay, fight through legacy code battles, make steps/headway to shift the application to a newer platform that makes practical sense than those who leave.
If your employer refuses to move to a stack you feel is justifiably better, in both business and technical aspects, then I totally understand leaving. If you're leaving because you don't want to maintain a system that's "older" and don't want to take on the challenge of improving it then I agree with your post. I'd rather not have those developers to begin with.
Ionic 2 has given me two platforms and a great development experience. The few times I've had problems they have an amazing responsive team on Slack that's helped me out right away.
If you are going to build an app that requires you to display 1000 items in a scrolling list, then yeah, forget any sort of Hybrid or Cordova based app - go full native.
Similarly if you want to have complex background geo-location tracking that doesn't suck your battery dry. You can't optimise that using Cordova as the 'go between', but you have to go native.
Outside of that, Ionic/Cordova will cover you bases and let you get apps to market 20x quicker without your users realising that it is not a native app.
Also that logo looks familiar?
Ionic 1 had too hacky API and not great performance, but Ionic 2 is much more mature in both of these fields.
Hydrogen?
Dr Manhattan? http://imgur.com/a/EQNya
JS has been object oriented since the beginning it just has an insane prototype based inheritance hierarchy that they're increasingly trying to hide/pave over.
Think subreddits for NPM.
Can you elaborate more on why you think it is insane? I think it is quite elegant, and in my experience they only try to hide or pave over it because just so many damn people can't get over the fact that it isn't classical object oriented
Also, for those who haven't read: http://javascript.crockford.com/inheritance.html
It also prevents sound encapsulation of class local variables and methods, the main point of object oriented programming in the first place.
Encapsulation isn't the "classic version" of OO. It's literally the main reason OO was created. Javascript fails to encapsulate because it doesn't support true private data members. There's patterns to achieve some sort of data safety (see http://speakingjs.com/es5/ch17.html#private_data_for_objects) but they all have disadvantages because it isn't built into the language, it's another hack.
Composition can be easily achieved using interfaces in most languages, another thing javascript doesn't support.
Excusing these faults to being dynamic language is like saying the model T is a nice car because "it was good for its time". Many languages before JS (including perl even) supported a more sound and convenient type system.
JS was badly designed in many ways and we are still paying the price for it today. ES6 and transpiling have made it finally worthwhile to try to develop anything significant using it which has led to the recent explosion of javascript development. I pray that EMCA continue to remedy what can be fixed in future and that Typescript catches on since it mows over much of the insanity.
Yes and no. With Typescript, js developers tend to write js code like they would write Java code, in all its verbosity. They don't need to, but they do.
What astounded me most was that nearly none of the established solutions offers a simple way to just cache these requests until when the device is online or any other simple ways to get such basic stuff working when offline/the connection is bad.
Generally speaking: In early 2017 its still way to hard to get very basic stuff on native (let alone web based) mobile apps working offline. The whole offline-first movement still has a lot of educational work to do.
I ended up using Firebase and it handled that case just BEAUTIFULLY right out of the box; the data updates optimistically on the player's own device, and once a connection is established Firebase syncs it with the datastore and all other phones update accordingly.
I would say that this is some pretty sophisticated behavior that I, the developer, just used right out the box following documentation.
You can also use CouchBase (disclaimer, I haven't tried it yet, but have an app that I will be using it for in the near future).
As a last resort, we also have an app that uses LocalStorage on the device to store an 'offline copy' of a database, and sync up when the user wants to. It works surprisingly well in this particular use case, and no need for any complex library. Just load up the local storage database when the app is launched for the very first time, and then whenever the user does a 'pull to refresh', it goes looking for the latest data from our server - if it cannot find a server connection, it fails gracefully.
http://ionicframework.com/docs/v2/components/#overview
,while Angular 2's official material design components are still in the pre-release stage:
https://github.com/angular/material2
Good job on filling the gap for Angular 2.
The real win using something like Ionic is that you can build your app using web tech that works equally well on the phone or in the browser, and that your developers already know. The trade-off is that it becomes more difficult (but certainly possible) to make your app look and feel native.
React Native gives you many of those benefits, but since it compiles to actual native code you can't reuse your code for a browser app.
It is entirely possible to reuse your React Native code on the web, especially thanks to projects like react-native-web[1].
Ionic is ideal for smaller projects (one to about a dozen developers) or varying skill levels, many of whom already know web development to some level and don't want to have to learn yet another way to do things.
With Ionic, you can use the same code for your website and your android and ios apps, or at least re-use a lot of it easily. This is a big deal to people who want to keep costs low.
If you need serious performance on your mobile app, use react. If you want lower costs, use ionic.
b) With Ionic 2, I can be productive right now, because I can mess around with CSS and HTML. React Native only supports a CSS-like subset and you need to relearn some layout things. It's close to web stuff, but not entirely.
c) My gamble is on progressive web apps (PWAs) in the long run.
I have already built tons of business apps with Ionic 2 (beta) and really like how easy it is and how well it scales. I also really like your ionic-app-scripts which make things like AOT a breeze.
I have developed native iOS since Apple introduced apps on the iPhone and I have created some very big macOS and also Android applications natively. I think there will always be use cases that you need to do natively. However for >90% of the apps I developed (and use) Ionic 2 is perfect and has saved me a lot of time.
The beta phase has been a bit though to keep up with because of how many changes where introduced by Angular and the build infrastructure, however since RC1 or so Ionic 2 is really really nice.
I came to the realization that native development is not feasible for many business contexts when I was tasked to build an application for iOS and Android simultaneously a few years ago. It was so much work and pain to keep both apps in sync that I have decided I never want to do this again. Luckily Ionic came to the rescue :-) You will still find platform specific problems, but so far it has been relatively easy to resolve them.
Congrats!
[0]: http://ionicons.com
So, isn't it just.. Ionic 2? or maybe Ionic 2.0?
Final is how they signify a version is ready for production and they'll stop modifying it. Up until now they've have 6 upgrades as Ionic 2.0.0-alpha, then 11 as Ionic 2.0.0-beta, 6 as release candidate, and finally, Ionic 2.0.0.
> Coming next we are working on new features to add proper desktop and electron support, something we’ve dipped our toes into in the past but will be making a bigger priority going forward.
That being said, there is Electron, but that "only" provides you with the runtime to run a web app as a natively integrated desktop app, not with visual components and the like.