Should I choose ionic?


#1

Hi. I’m currently using AngularJS and Bootstrap for a web app. Right now performance is an issue for me on the iPad. For example a bootstrap modal with a couple of ng-repeats takes over a second to load.

What does ionic offer in terms of performance? Does wrapping something in Cordova make it faster?

And should I start brand new using the starter project or try to replace bootstrap with ionic?


#2

Well… ng-repeats with a decent number of entries will slow down whether it’s bootstrap or ionic. However, for an upcoming release, the ionic folks are working on “virtual” lists that will only render the bits that are visible, which should speed up angular’s chunky list handling pretty nicely.

Wrapping in Cordova won’t make your app faster; AFAIK you end up using the same rendering engine as if you were just using the browser on the same device, so performance will be comparable.


#3

That said, I didn’t answer your general question, which is, “should I choose ionic”. Ionic is much more of a complete UI framework than bootstrap, which is more like tools you use to build a UI, so I’m not sure the question really applies.

As someone who converted a pure-angular project to ionic, I love it, and the ionic folks have done a good job of thinking hard about how to make nice controls, how to optimize for touch devices, etc. I’m super happy with my results, and even though it’s technically alpha, it’s very polished and they’re very responsive to bug reports.


#4

Take a look an bindonce if you have a heavy app to help improve performance. It will help limit the amount of watches AngularJS creates.


#5

Thanks for the responses.

I’ve tried a lot of things to improve performance. I can’t use bindonce for my ng-repeat because the watches on the elements could change. I have an ng-repeat of buttons that represent restaurant tables that change their class and/or style when pressed.

As I type this maybe a solution is to add the watches after rendering the elements since the variables don’t change during rendering.