Four Frameworks

I made a todo list app in Backbone, Angular, Knockout and Ember.

I've been wanting to experiment with some Javascript frameworks and so I challenged myself to make the same app four times using four different frameworks. The app I chose is a simple todo list app, just like everyone else in the entire world. The frameworks I selected are AngularJS, Knockout, Backbone, and Ember.

Of the four frameworks, I like Knockout the best for what I usually do and Angular the best for a larger project. This is entirely based on my experience writing a very small app in them.

Backbone

I had a lot of trouble learning Backbone. None of it came naturally and everything felt a little forced. The entire time I was learning about the framework and using it I kept wondering why it was so popular. Not because it's bad, I just couldn't figure out what problem Backbone was invented to solve. Normally I only use frameworks or libraries that provide solutions to problems that need solving, and Backbone felt very irrelevant to me. In its defense, though, I think that it would probably be awesome and life-changing if you were doing something it did apply to.

I just don't know what that would be.

Knockout

I loved Knockout (or KO as they call it). Almost everything that I learned and did using KO made wonder why I haven't started using it sooner. Your mileage may vary, but all the problems that KO solved were problems that I've experienced.

Actually it only solved one problem, which brings me to my next point. Knockout only does one thing: data binding. It just does that one thing incredibly well. This fits my coding style a lot better than one-size-fits-all frameworks, because it allows me to build a component stack that's tailored to the project at hand, rather than having a ton of stuff I don't need included on a page.

Lastly, Knockout has the best beginner documentation I've ever seen. Live tutorials? Yes, please.

Angular

I liked Angular a lot. There is great documentation for beginners and a great community. Despite its tiny download size, it provides a ton of functionality. Angular didn't quite measure up to Knockout for just data binding, but it provides so much more that I would definitely choose Angular over Knockout for large projects.

Angular has a great balance between providing magic functionality and declaring app structure explicitly. The whole thing feels very well-designed and I can definitely see why it's so popular.

Ember

You may be wondering why there isn't a screenshot of the app I built in Ember. That's because I didn't actually build an app in Ember. I spent a few hours attempting to get the framework to include on my page without throwing errors and then I gave up.

I've heard a ton of great things about Ember, but I have two major complaints: dependencies and stability.

Ember has a hard dependency on Handlebars, a Javascript templating language and interpreter, which I don't like. I'd prefer to have different options of template engines, or at least a useful error message when Handlebars isn't present. When I included Ember at first without including Handlebars it crashed Javascript. That's just poor planning. At the very least provide a useful error message when you crash Javascript, but in general being a good web citizen means trying not to crash Javascript when your framework doesn't bootstrap properly.

At the time of writing, Ember is in very active development. This is a great thing for the health of the framework, eventually, but for now it makes it a nightmare for anyone just learning. Tutorials go out of date in months (or just one month) and there is a lot of contradictory advice on the internet right now. Added to that, Ember depends on Ember-data, which is still in beta. Dear Ember devs, if your stable-version software depends on a core plugin which is in beta then your stable-version software is actually in beta. Love, Bryan