Want to build a complex app that could run on iOS, Android and Windows Mobile with no(t much) fuss? Don't like writing HTML or CSS by hand but enjoy writing JavaScript MVC stuff and fancy learning new stuff? Go with Sencha.
Want to build a nice mobile interface for a website but you need your very own markup and CSS and you'd also like to apply your jQuery king-funess to the project? jQuery Mobile is the thing you need.
Want that "site" to be a native app that talks with your web services and uses accelerometer, gps and camera? Add Phonegap.
* a faster development process once you're clear on the concepts
* along with conventions, a lot of configuration is possible
* the new class system makes it easy to build custom UI components and write maintainable code
* the new class system combined with jsbuilder/sdk tools helps you produce minimal js.
* many well done examples
* ComponentView and DataViews are kickass. saves many lines of code that you might have written for updating views otherwise
* many types of eventful data stores, and they talk REST out of the box!
* great performance on iOS in general
* our customers needed a lot of theming - we build our theming system on top of sencha's sass work. rolling out new looks = 10 lines of change for us :)
* free :)
The bigger (mobile & desktop browser-friendly) ExtJS has the GPL "issues" - the commercial license is ~$600 minimum per developer.
With mobile web development, the frameworks add needless complication and bloat. All the successful good-looking mobile webapps I've used (Twitter, FB, etc.) don't use any of these frameworks.
Edit: as others have noted, there's some overlap. The project I currently have under development uses PhoneGap, jQuery Mobile, and iUI for different functions.
HP's Enyo framework seems really interesting though, as does Mulberry. But sometimes the best framework is no framework at all - Backbone + Zepto can take you a long way (but lacks fancy mobile UI widgets). It all depends on the project.
I really hope android browser can mature to the point where the browser wars (think firefox vs Chrome) come to the mobile space.. Geolocation for example there's a huuuge gap between how accurate iOS is compared to android (especially with wifi switched on).
Also, I realize that it's more idiomatic (and reflective of what's really happening) for jQuery mobile to present the user with a waiting spinner, request the content, and then change pages on receiving the content.. But it feels much more responsive to cheat and slide to the next page then present a spinner.. Just a personal nitpick.
But once you get past all that, you have a powerful library with a good set tools for unit testing and a compiler that does dead code removal, function inlining, optional type checking through JSDoc annotations, etc. Its miles ahead of any pure-javascript solution because compilation is so tightly integrated into the whole development process. And yet you don't have to compile to run the code in development, so debugging is no harder than before.
That said, it's worth noting that the closure library is not a framework. You build your own application structure, models, etc, so it's definitely more work to get started.
Runs smooth :)
Approach seems to break down to JS driven app development vs. a more dom/html starting point. ember.js, sencha2, and possibly enyo seemed great for a component driven dev approach, but hard to deeply modify the UI behavior without fighting with the framework. These frameworks are for making your html app look like the apple UI guidelines, and "just like native". We are building games, so actually don't want to look just like other apps... So for us using backbone (+mustache) gives a lower-level approach to code structure + binding, combined with a UI module for when you need a touch-UI widget (which is a pain to code by yourself). I'm sure other folks more experienced with ST2 may disagree but thats what we found.
Since we are doing non-wifi browser based distribution, the OTA download size is also a concern. If you're packaging/bundling for the app store this shouldn't be a concern.
=== appmobi / jq.mobi
PROS: lightweight, self-contained, plug-in support
CONS: animation + ajax bugs when we tried. seems like a single company product
HN thread: https://news.ycombinator.com/item?id=3470946
4k jqmobi
15k jq UI
=19k total
=== zepto + jqtouchPROS: lightweight, small download, decent functionality, backbone support right off. very easy to work with.
CONS: missing many basic UI components tho plugins may exist. zepto animation.fx is limited. BIG problem: very slow on mobile? we had problems with transitions on iPod/HTC devices. Sencha seems much faster. jqmobile isnt really active project - main dev is now on sencha touch? tho commits are trickling thru https://github.com/senchalabs/jQTouch/network
9k jqtouch.min.js
20K zepto.min.js
=29k total
=== jquerymobile + jqueryPROS: very active project, extensive functionality
CONS: dependency on jquery, then also plugins eg for CSS animations. supports lots of non-webkit devices we dont need to support, so not needed code. had some problems with creating copies of pages in the DOM when you navigate. transition code is based on jqtouch, tho performance seems improved? http://jquerymobile.com/demos/1.0a2/#docs/pages/docs-transit...
24KB jquery.mobile-1.0.1.min.js (24KB
30k jquery.min.js.gz
=55k total (+plugins?)
So we are currently digging into the transitions+DOM issues on the last two, and deciding if the 40k is a killer given 2G networks in many places... but would be interested to hear what others think.Many of these can - often, should - be used together. PhoneGap doesn't offer any native interface elements, so pairing with jQuery Mobile or Sencha is often done, for example.
Personally, I voted for PhoneGap for any apps that don't require a "native" look, and NimbleKit for any that do.
Beta invite for HN here: http://codiqa.com/beta/feb
Look forward to your feedback! Version 1 is meant to help you whip up prototypes really quickly and then build off of them.
+1 enyo
edit: assuming no previous web programming experience
jQuery-based. Automatically adapts to native layout/styling conventions of iOS and Android.
We use a custom framework... Existing frameworks are moving targets, usually have significant amounts of 'dead' code (for our product) and are very hard to maintain (easy to run into significant framework level bugs very quickly)... Rolling your own involves other compromises of course :-)