
Javascript Framework Popularity graphed by Github Archive - kalv
http://caliper.io/blog/2013/Javascript-Framework-Popularity/
======
WickyNilliams
It's a damn shame that knockout.js [1] receives so little attention. Both in
terms of not being included in the article, and if it had been included it
would look quite poor next to the others (currently "only" 3750 stars). But
it's a great framework and for some reason it's often overlooked in spite of
other lesser libraries (e.g. spine, if we use the github stars metric)

First and foremost, it has excellent documentation. Everything is explained
clearly on the site, and it's got a great interactive tutorial [2]. Contrast
this to everybody (myself included!) moaning about the angular, ember docs
etc.

Besides that, it's got _deep_ browser support (all the way back to IE6!), two-
way data-binding, plus it's intuitive and simple. In fact, combined with the
excellent docs, I'd wager any competent dev could have the gist of knockout
and be quite productive within an hour. It is also extremely easy to extend if
you wish to plugin external functionality. Which leads to the final point - it
plays well with other libraries that you're probably familiar with. e.g. I
usually pair with Zepto, jQuery and/or AmplifyJS.

In the interest of being balanced, I must say it does have some bad points.
The main thing for me is lack of architectural guidance. Nowhere is it
explained the best practices for structuring apps. Nor is there any guidance
on unit testing. You can, of course, work out all these things yourself, but
why must the same problem be solved over and over? Set some conventions and be
done with it! That said, there's a framework of sorts being built on top of
knockout called Durandal [3] that aims to solve some of these problems. I've
not used it yet, but it looks very neat. Also you'd be remiss not to check out
Ryan Niemeyer's website [4] for lots of guidance and useful plugins (he's one
of the core contributors I believe)

[1] <http://knockoutjs.com/> [2] <http://learn.knockoutjs.com/> [3]
<http://durandaljs.com/> [4] <http://www.knockmeout.net/>

~~~
api
Knockout gets excluded by many people because it comes from the .NET
ecosystem, but that's completely unfair. It's pure JS and has nothing in it
that ties it to .NET or Microsoft in any way.

I just picked it for a new project. It's very, very clean and nice.

~~~
WickyNilliams
I definitely echo your sentiment. However I think you're slightly off in that
it doesn't come from the .NET ecosystem. IIRC Steve Sanderson had released KO
before he began working for MS. The affiliation you allude to comes from them
pushing it quite hard since he was hired - as you would if you had Steve as
your employee!

EDIT: good luck with your new project if it's your first with KO. If it is,
let me know and I can give you some quick tips to get you on the right track

------
drinchev
I'm a big fan of Backbone. I'm used to do most of the scripting by myself and
I don't like to mess my html data-attributes with javascript libraries. Also
the source code is pure and self-explainatory, supports underscore and is used
to be paired with CoffeeScript. Because of that, I'm pretty fast and flexible.

~~~
camus
I was like you until i try Angular ...

Having an entire data driven view save loads of time,trust me. You can have
complexe nested objects, and you dont have to worry about how the view will be
updated. Change a value in the object , and the view updates. And Angular
works very well with jquery plugins once you get the directive thing.

I still use Backbone for "brochure" sites and campains though, when i port old
Flash sites to HTML5.

------
ojr
Google Search Trends between Javascript MV* Frameworks: <http://goo.gl/ONZwe>

~~~
kalv
I saw that earlier today. I wonder how much of that just indicates how many
developers are searching for help on the framework :)

~~~
jyz
Yea I definitely believe that's the # of searches. I, for one, bookmarked
backbone's API and never had to search for it

------
cllns
I wish there was also a (stacked) percent graph, to show relative growths.

