ExtJS and AngularJS are the two industry leading frameworks for Rich UI development.
This article compares these two frameworks over 30+ points around benefits, architecture, testing, mobility, performance, build and deployment among other things.
Architectural Differences:
* Application Design Framework
* Components
* Routing benefits
* Testability
* Data Binding
* SEO Friendly
* Mobile Solutions
* Dom Approach
* Deferred and Promises
* Dirty checking
* Deferred bootstrap
Summary:ExtJS is component based (Grid, Tree, Forms, Charts); the code begins with extending API classes and configuring models, customizing the presentation or behavior/events if needed, adding these components to containers/layouts. It follows object oriented principles and MVC pattern and direct interaction with DOM is rarely needed.
AngularJS, on the other hand, is declarative programming, we begin with adding AngularJS directives in plain HTML, configuring models, view configuration using templates and routes; and the framework takes care of final DOM creation. Since we are dealing with HTML, there is a direct interaction with HTML structure or DOM elements.
ExtJS 5 Beta:
Recently launched ExtJS5 Beta version provides support for router and hence deep linking is now possible. ExtJS 5 also supports MVC and MVVM.
EXTJS:
If we use ext-all, then the stats are:
AngularJS:
This article compares these two frameworks over 30+ points around benefits, architecture, testing, mobility, performance, build and deployment among other things.
* Application Design Framework
* Components
* Routing benefits
* Testability
* Data Binding
* SEO Friendly
* Mobile Solutions
* Dom Approach
* Deferred and Promises
* Dirty checking
* Deferred bootstrap
Summary:ExtJS is component based (Grid, Tree, Forms, Charts); the code begins with extending API classes and configuring models, customizing the presentation or behavior/events if needed, adding these components to containers/layouts. It follows object oriented principles and MVC pattern and direct interaction with DOM is rarely needed.
AngularJS, on the other hand, is declarative programming, we begin with adding AngularJS directives in plain HTML, configuring models, view configuration using templates and routes; and the framework takes care of final DOM creation. Since we are dealing with HTML, there is a direct interaction with HTML structure or DOM elements.
ExtJS 5 Beta:
Recently launched ExtJS5 Beta version provides support for router and hence deep linking is now possible. ExtJS 5 also supports MVC and MVVM.
Performance Comparison Stats
To evaluate the performance aspect of these two frameworks, we developed a small application with a simple grid, tree and a chart component. The prescribed build process for both these technologies were performed - so we can have minified builds for exact weight comparison. YSlow was used to collect the performance metrics. Other details:- ExtJS: using grid, tree and chart components.
- AngularJS: using angular-charts.min.js, angular.min.js, jquery.min.js, angular-route.min.js, ng-grid-2.0.7.min.js, angular.treeview.min.js, angular-animate.js modules.
- The same http requests, for the data part of these components are used, going to the same web server.
- Conclusion: ExtJS is 3 times heavier than AngularJS.
EXTJS:
If we use ext-all, then the stats are:
AngularJS:
When to use which framework:
Use ExtJS if:- You want to use handy components delivered with Sencha Ext JS. It is a huge time saver.
- You do not want to worry regarding cross compatibility issues while Programming and Developement. It is a big plus.
- You or your client need specialized licensing or an accountable party to call for support.
- If separate rich desktop applications (with Sencha ExtJS) and mobile web applications (with Sencha Touch) is valuable.
- If paid support contracts and a per-seat / per-server commercial license is affordable.
- Smaller Footprint is required. For more details, see the Performance Comparison Stats.
- Responsive design is a requirement for your application.
- Your organization find value in automated testing and automated testing is a part of your development culture.
- It would be cheaper to integrate existing 3rd-party components which are free.
- Your team is comfortable with CSS and dealing with cross-browser compatibility issues.
- If the team will be able to manage integrating new releases and bug fixes from the selected 3rd-party libraries throughout the application's development lifecycle.
Application Design Framework: | ||||||||||||||||||||||
Ext JS:
| AngularJS:
| |||||||||||||||||||||
Components: | ||||||||||||||||||||||
Ext JS: One of the primary attributes that distinguishes ExtJS from other JavaScript frameworks is the inclusion of a rich suite of theme-able UI components. Pros: The handy components delivered with Ext JS are a huge time saver. Cons: Sencha components tend to produce verbose DOM output, resulting in many more tags that might otherwise be required. | AngularJS:
|
|||||||||||||||||||||
Routing benefits: | ||||||||||||||||||||||
ExtJS: ExtJS does not have a router. However most of the single page applications may not require a router unless you want to make internal/deep-linked pages as seo friendly or with bookmark support. | AngularJS:
| |||||||||||||||||||||
Testability: | ||||||||||||||||||||||
ExtJS:
| AngularJS:
| |||||||||||||||||||||
Two way data binding:Two way data binding is a glue between the application UI (User Interface) and model objects, so that changes to an object̢۪s properties reflect in the UI and vice-versa. | ||||||||||||||||||||||
ExtJS: ExtJS has excellent data binding feature using its Store object. To execute two way data binding, a little work needs to be done such as reloading the store etc. Reference: http://www.techferry.com/articles/ExtJS-vs-AngularJS.html | AngularJS: Two way data binding in AngularJS is executed with the scope which is basically a model nested in a prototypal inheritance tree of scopes (models). Cons: Application becomes laggy if there are 2000-3000 bindings in a template. Bindonce is a great way to minimize the number of watches when most of the data presented in your page, once rendered, are immutable and you need not keep watching them for changes. |