It depends on exactly how much you end up having to optimize for each platform, and how much reuse you get between platforms.
If your app is a simple broacherware+notifications app, then HTML5 is probably the way to go.
If you can afford expert developers for every platform and mobile is critical to your success then 100% native makes sense.
There just isn't a simple answer here. To quote nostrademons:
I'm still not sure which technology is, on the whole, better for mobile apps. But one of the signs that you actually understand a problem domain is that you can give advice more specific than just "Competing technology X is better than competing technology Y"
You're comparing apples and oranges. If you optimize for a mobile browser, you can target every modern mobile platform simultaneously, and most of your work overlaps with making your app work nicely for people on laptops and desktops.
If you go for a native app, you'll have to practically start over for every operating system.
Define "best". The best tools aren't necessarily the ones that give you maximum control or best performance. If that we're true we wouldn't have so many Ruby on Rails or Django web apps.
Good point. By 'best tooling' I'm mainly thinking about two things:
- How easily can I debug things if something breaks?
- In case I'm not happy with a certain behavior is it a dead end or can I simply swap out a parameter / function / module (in that order)?
These two aspects are IMO essential for choosing any development environment if I have the choice. This goes for web development too, which is why I'd prefer something like Django over something like Joomla for example. I don't even care so much about performance at that point.
Do you agree with me that at least in case of iOS, native beats html+js+webviews in those two points?
I wouldn't. Debugging js is quite easy, overall probably more straightforward than dealing with Xcode. And there are tons more choices in the js world, having both more developers and a more free-as-in-speech mindset.
The big downside is the one Facebook found, js in a webview is just... slow.
Correction. Debugging JS in not easy. I have been working on a native application which has some HTML5 components in webviews. There is no easy way in XCode to debug JS in this kind of mixed application. In fact, it is a royal pain in the ass. You can run the JS in Chrome debugger or a web development IDE, but that can only work if all your functionality is in HTML5/JS and not a mix of Native and HTML5.