I found the performance of PhoneGap still lacking. Currently, I develop a very simple app with Impact.js, which is an HTML5 game engine and can be deployed with Ejecta. However, I don't do a game, more like a calendar app.
The downside is: You can't use any HTML/CSS elements for building the UI. Because Ejecta supports only the canvas element.
The plus side is: If you manage to make a basic UI like in a "game" with canvas only, you'll get near-native performance, since Ejecta implements an OpenGL-enhanced canvas element.
The performance problems are not the fault of Cordova in the newest version which can be configured to use to the newest version of Chrome on android devices. Instead performance issues are the result of inefficiently manipulating DOM. Try famo.us with phonegap and you'll be able to overcome the performance issues you're seeing.
disclaimer: I work for famo.us, but trust me here. do a proof of concept of something with cordova and famo.us that in you prior experience was poor with just cordova alone.
Basically. Although, any way you slice it you're going to want something (famo.us, some future alternative that uses the same same techniques or your own solution that uses the same techniques), because letting the logic that manages opacity and 3D transforms to be mixed in with your app logic code is poor encapsulation. Honestly, it would be great if the browser makers realized the value of a low level scene graph API to permit people to create solid app-like experiences while also preserving semantic HTML structure within the leaves of the scene graph.
I honestly haven't spent much time with Ionic and I have a conflict of interest, so take my position with a grain of salt, but AFAICT, thus far we (at famo.us) have spent more time building out the foundation (scene graph, perf optimizations, and physics engine integration) that allows a UI layer like Ratchet, Ionic or Material to be built on top. With that in mind, we haven't yet spent as much time on the UI layer, which is something we're doing now. Think: solid engine and architecture, but body work and trim in progress. Ionic (and Ratchet) on the other hand spent more time focusing on the UI layer, and is currently in the process of trying to modify the underpinnings to do the types of things famo.us is already capable of doing. Think: sexy looking car with an underpowered engine in the process of being upgraded.
However, again, my Ionic experience is pretty limited and a tad dated, so I urge you to do your own experimentation with both to see which best meets your needs right now. Personally, were I an outside developer, I would be choosing between famo.us and ReactJS instead of between famo.us and Ionic, since I'm personally "magic" averse and don't like tight coupling between the UI layer and the underlying layers that make that UI layer possible. The chrome on top is far less important to me (unless the goal is a quick prototype that I'm certain will be throwaway) than a solid modular architectural foundation that I comfortably know I won't be fighting as my app becomes larger and more complex. That being said, my broad generalizations here are based on my Ionic impressions from a few months ago. Things may have changed.
To further elaborate on what criteria I would use to choose between famo.us vs ReactJS, it comes down to this:
(1) Do I just need a (a) basic interface performance guarantee with discrete changes betweens application state and (b) greater backwards browser compatibility? Is my "app" going to be more traditional web app on desktop (vs Android and iOS like)? => ReactJS
(2) Do I need to make an app with not only a performance guarantee, but continuous transitions between application state (animations like those on capptivate.co), and will that application be largely consumed by people with relatively new mobile devices (smart phones or tablets, android or iOS)? => famo.us
Lastly, from what I've heard from fellow developers, famo.us and reactjs play pretty nicely together and we're going to be working on integration and tutorials between both, so it's possible that whichever one you start with today, you can add the other to get the best of both worlds. We're also starting work on an EmberJS and famo.us integration, so if you want a lot of the data and routing niceties of emberjs, but the interface niceties of famo.us, there should be tutorials and demo apps coming out in a few months.
Another option, which is very new, but gives you a lot of the reactjs benefits, but in a more modular packages that feel better to NodeJS developers is rayno's mercury project. It's still pretty new and documentation is lacking (which you can contribute to), but it takes the react ideas and breaks them down into smaller rearrangeable pieces.
Hybrid gaming might become a bigger thing when iOS8 is finally released, it should bring WebGL support. I'd like to see how e.g. pixi.js with WebGL renderer performs on mobile.
I've been able to use PhoneGap / Cordova in my iOS projects and achieve ~60FPS, but I've had to stay within some constraints (e.g. use GPU-accelerated CSS animations). As suggested, Crosswalk is an interesting alternative for Android.
So you choose to implement a very simple "calendar" app with a HTML5 Canvas Game Engine!?!?! Not only that you then layer the javascript on top of that with a 3rd party javascript interpreter (Ejecta)....
That doesn't sound simple at all! That sounds super complicated...
The downside is: You can't use any HTML/CSS elements for building the UI. Because Ejecta supports only the canvas element.
The plus side is: If you manage to make a basic UI like in a "game" with canvas only, you'll get near-native performance, since Ejecta implements an OpenGL-enhanced canvas element.