During the last wroc_love.rb conference we've organised a "fight" between 4 different approaches to Single Page Applications. Below is the video (0.5h) and a very short and simplified transcript from this event.
The participants, from the left-side:
Patrick Mulder - Backbone
Piotr Sarnacki - Ember
Andrzej Krzywda (me) - Hexagonal
Adam Pohorecki - Angular
moderator - Jan Filipowski
Andrzej: for all the apps
Adam: we need better tools on the backend in order to have a better developer experience
Piotr: Andrzej, would you write wikipedia as a SPA?
Adam: What about SEO?
Andrzej: It's a myth that SPAs are not indexable. Google has an official document for that. It is additional work.
Patrick: You can use PhantomJS for SEO.
Adam: We've used PhantomJS for that, took a couple of hours.
Patrick: Backbone, very small, minimal. you don't bring too much dependencies. you can choose what you want.
Adam: Angular, Two-way data binding is the key feature. Synchronization of HTML and your JS. Choose framework with data-binding. Ember is essentially a language, forces its own object model. Backbone as well. Hexagonal or Angular is pure JS.Your application can live outside of Angular. You could use Angular with a Hexagonal app. Backed by Google, more mature than Ember.
Andrzej: Data binding is not as important as you may think. Manual control is not that difficult. Hexagonal doesn't have data binding jilt-in. Apps are not about data changes, but about actions
Piotr: I agree that data binding is important. Both, Angular and Ember are good for big applications. Nested views, zombie views (backbone). Angular has its own compiler for DOM elements. You need to know how the compiler works. Angular uses dirty checking. Angular claims that your UI shouldn't have than 2000 elements. You're screwed if you have more.
Adam: We built a 100 rows, 500 columns table. We managed to do it with Angular. It's not that hard to do the UI part. Directives are like helpers for html.
Andrzej: It's a problem of all of us here, including Hexagonal. We use different terminology for different things. All the frameworks are far from being Rails, we're not mature enough. All the frameworks are in their infancy years.
Patrick: It's easy to work with Rails and Backbone
Piotr: Ember has its own class model. It's done mainly for making it easy to optimise. Ember is about Convention over Congifuration. Rails in JS. Ember is like Rails, Backbone is like Sinatra. At some point you have to use more plugins if you start with something minimal. A lot of pain if you want to write a big app with a small framework.
Andrzej: I disagree. I would use a framework for a prototype or for a small app. Once the app grows, it has its own world. I don't want the framework to go into my way. I want to have the control over the applications. I'd use Ember for smaller apps, not for bigger apps.
Andrzej: Hexagonal has just started. It got the name just recently. We've used it for over a year. We have a strong team behind it. Our goal is to show the guidelines.
Piotr: Ember is 1.0RC now. Docs are better now. IRC is very active. Google Group.
If you're interested in Single Page Apps, you may want to follow me on Twitter.