Javascript Frameworks Comparison

Preview:

Citation preview

Ganesh P A, Technical Architect

A WALK THROUGH - JAVASCRIPT

FRAMEWORKS

JAVASCRIPT MV* FRAMEWORKS

Organize code using variations of MVC Pattern

Helps in Readable, structured,

testable and maintainable code

Tying together a DOM manipulation library

Templating

Routing

BIG FOUR

Maintained by Google and community

Initially Released on 2009

Current stable release 1.3.x(Feb 2015)

~110 kb (gzip/minified)

Miško Hevery and Adam Abrons

Developed and is maintained by

Steve Sanderson, a Microsoft employee

It is a personal open-source project, and not a Microsoft product.

Released on July 5, 2010

Current version 3.3.0 (Feb 2015)

~21 kb (gzip/minified)

Created by Jeremy Ashkenas,

Initially Released on October 2010,

Current stable release 1.1.2

~6.5 kb (gzip/minified)

Created by Yehuda Katz, a member of the jQuery, Ruby on Rails and SproutCore core teams.

Initially released as the SproutCore 2.0 framework later renamed as Ember.js

Initial release : 2011

Current stable release 1.10.0

~102 kb (gzip/minified)

Comparison

Scoring system

OK Not Good Good

How fast can I get up and running from homepage link?

HELLO WORLD

Github https://github.com/jashkenas/backbone

Github

https://github.com/emberjs/ember.js

Github https://github.com/angular/angular.js

Github https://github.com/knockout/knockout

DEPENDENCIES

NO DEPENDENCIES

NO DEPENDENCIES

DATA BINDING

Process that establishes a connection between the application UI (User Interface) and business logic

Data-binding is fully supported

Data can be bind into many attributes like text,value, options, enable etc

Provides Option for Creating custom bindings

Data-binding is fully supported

Models use standard JSON properties (e.g. car.color = "red";)

Provides Option for Creating custom bindings

Data-binding is not supported by default.

There are plugins available to support Data-binding

Data-binding is fully supported

Models use getters and setters but the binding is automatically and better than Backbone.

Used for routing your applications URL's when using hash tags(#) and/or HTML5 history API

Maps an url to a javascript function

ROUTERS

/person/12/101

Routing is very simple

Router is similar to Backbone’s

/person/12/101

Router is extremely capable, but very complex

Supported embedded routes

/person/12/101

Knockout does not support routing by default

Still Routing is easily configurable by following third party libraries

VIEWS

How the stuffs are displayed in the screen

Simple and straight forward.

Easy for developer with JQuery and DOM skills

Simply extend Backbone.View, grab an element and put stuff in it

No Official Templating, but easy to add using

Uses HTML as templating language

Automatically pulls in HTML templates via AJAX when needed

Extensive view type support

Very easy to create re-usable components

Handlebars are used for templating

Uses HTML as templating language

Supports

Native templates

Using default control flow bindings

String based templates

Third-party template engine

TESTING

Support for testing application

No default test solution; Test it your own Can use following third party solutions

Fantastic test support. Designed from the beginning to be easy to test. Karma developed by Angular JS team is popular test runner

Poor testing initially Pretty good testing support now

As of now, no default debugging tools Functions like Console.log(), ko.toJSON() helps debugging process

Can use following third party solutions

DATA

How do I get data from the sever?

Uses JQuery’s $.ajax to power Backbone. Very Easy to understand Default behaviour is relatively easy to override

No JQuery

Can do with Angular’s $http but much better using $resource

Very good API

Requires the ngResource module to be installed.

Uses JQuery’s $.ajax under the covers

Just “getting data” is relatively easy to do e.g.

Doing things the “Ember way” is a bit more complex

Uses JQuery’s $.ajax

Uses knockout mapping plugin

Maps JavaScript object into a view model with the appropriate observables

How easy to get help?

COMMUNITY /DOCUMENTATION

How easy to get help?

THIRD PARTY INTEGRATION

How easy to integrate another JS library?

Hello World

Dependencies

Data binding

Routers

Views

Testing

Data

Community/Doc

umentation

Third party

integration

Development

tools