35 facts in comparison
Has a mechanism to filter views based on scope variables (for example when searching) without the need to write much extra code.
Template engines allow for easy and flexible UI building.
Some people see this as an advantage as it eliminates the overhead from another template language.
The MIT License is a very permissive license which allows all uses, including business use, without warranty.
Allows for nesting view templates into top-level views from within a template.
Built-in utilities to help validate client input before it gets processed or sent to a server. While this does not replace server-side validation, it can vastly improve the user experience.
Has a plugin which includes facilities to easily create view animations.
Includes utilities to keep models in sync with their server-side representation without the need of writing jQuery boilerplate ajax calls.
This shows that the framework has a living ecosystem, large community support and allows for more flexibility and faster development.
Has plugin which offers a simple functionality to synchronize models with the HTML5 LocalStorage.
Includes facilities to easily create view animations.
Does not require or seriously encourage the use of a specific library (like jQuery, Zepto or MooTools) to handle DOM manipulation and can be used with one the developer prefers.
The node package manager can also be used for managing front end scripts.
Uses jQuery Lite elements where DOM manipulation is necessary. This way, developers get jQuery’s comfortable helper functions without having to include the entire library. In many use cases, this eliminates the project’s dependency on jQuery.
Asynchronous Module Definition libraries allow for easy modular, clean programming. If a framework does not work well with such libraries, it might have some other means to modularize its components and resolve dependencies, like Dependency Injection.
Bower is an easy-to-use, npm-like package manager for frontend applications.
Models and views can be bound to update each other.
This makes for easier data transfer between the application and REST-Services or the LocalStorage. It also reduces complexity from getter- and setter functions.
Views can be bound to update automatically when an observable object changes.
Models are observed for changes. This is a well known pattern. Can be more performant than dirty-checking in some cases.
Checks for any changes, and updates the corresponding fields. Can be more performant than observers in some cases.
Has an internal implementation of the Promises/A+ specification. Promises are a popular alternative to callbacks when dealing with server responses.
Routing allows interaction with the browser url. This is very important for a good user experience if you are building one-page apps.
Smaller file size means faster load times.
Less dependencies means less extra scripts to include, usually resulting in less development overhead and faster load times.
Model changes do not immediately result in view updates but are queued and dispatched as a group. This can be a lot more performant than instant view updates.
This improves testability and modularity.