AngularJS和ReactJS对比

Angular的特色:

优点:

AngularJS是一套完整的框架,angular有自带的数据绑定、render渲染、angularUI库,过滤器,$filter,$directive(模板),$service(服务), $q(defer),$route, $http,$cookie, $inject(依赖注入),factory,provider……,等等一系列工具,基本上只要你在作web开发用过的东西,它都有一个。可是这些东西react自身都没有。php

Angularjs的架构清晰,分工明确扩展性良好,model,view,controller谁在何时作什么事情说的很清楚,angular可以让程序员真正专一于业务逻辑,对js能力要求也不高(基本上只须要写业务逻辑,实在用不上那些高级的js技巧和知识呀),并且由于对html侵入不大,很是易于和designer协做。整个框架充满了DI的思路,耦合性很是低,对象都是被inject的,也就是说每一个对象均可以轻易被替换而不影响其余对象。html

Angular生产效率高,单向数据流什么的想法很是好,可是写起来太麻烦!我只想变动个很简单的数据还要通过action、dispatcher、store、view四步,angular里一行代码就搞定的事情在react里却如此麻烦react

Angular的背后是Google,因此社区基础是不用担忧的,整个生态也已是很是的完整了,从最基本的Tutorial到StackOverflow的问题数到框架自己的剖析都很是多,Angular上手比较容易。webpack

劣势:

1. 性能 
一样是TODO MVC的Sample,Angular彻底载入用了1.1s(WebPagetest - Visual Comparison)。React只用了0.3s,不得不说,确实挺慢的。。
2. Angular 2.0推翻重作使得目前不宜采用此框架程序员

Angular 1.x版本实际上是个比较旧的东西了,如今看来有些理念过期了,好比依赖注入、本身独特的模块化,这些东西其实在ES6下已经很好地被解决了。web

Angular的2.0几乎是一个推翻重作的框架,估计不会有1.X的upgrade方案。因此若是如今新开始的项目采用Angular的话,会是一个很尴尬的时机。一样,如此大的改动彷佛也反面印证了1.X并非那么好。gulp

 

React的特色:

优点:

1.React伟大之处就在于,提出了Virtual Dom这种新颖的思路,而且这种思路衍生出了React Native,有可能会统一Web/Native开发。在性能方面,因为运用了Virtual Dom技术,Reactjs只在调用setState的时候会更新dom,并且仍是先更新Virtual Dom,而后和实际Dom比较,最后再更新实际Dom。这个过程比起Angularjs的bind方式来讲,一是更新dom的次数少,二是更新dom的内容少,速度确定快浏览器

2.ReactJS更关注UI的组件化,和数据的单向更新,提出了FLUX架构的新概念,如今React能够直接用Js ES6语法了,而后经过webpack编译成浏览器兼容的ES5,开发效率上有些优点.
React Native生成的App不是运行在WebView上,而是系统原生的UI,React经过jsx生成系统原生的UI,iOS和Android的React UI组件仍是比较类似的,大量代码能够复用cookie

3.维护UI的状态,Angular 里面使用的是 $scope,在 React 里面使用的是 this.setState。 而 React 的好处在于,它更简单直观。全部的状态改变都只有惟一一个入口 this.setState(),Angular 就比较复杂,不知道背后使用了哪些黑魔法。架构

 

劣势:

React是目标是UI组件,一般能够和其它框架组合使用,目前并不适合单独作一个完整的框架。React 即便配上 Flux 的组合,也不能称之一个完整的框架,好比你想用Promise化的AJAX?对不起没有,本身找现成的库去。并且第三方组件远远不如Angular多。目前在大的稳定的项目上采用React的,我也就只知道有Yahoo的Email。React自己只是一个V而已,因此若是是大型项目想要一套完整的框架的话,也许还须要引入Flux和route相关的东西。而Angular在这方面提供的东西比React多多了.

 

如何选择?

Angular是真正的大而全的Framework,它有一套生态体系和思路,基本你按照它的思路往里面填代码就OK。
React是一个简短有力的library,它只负责解决你某个单一的“痛点”。
开发大项目或者比较正规的项目,建议使用Angular,angular 是最适合CRUD的SPA 单页面的应用程序。 和 angularUI 一块儿使用就能够搭建还不错的web app.
yeoman+bower+gulp能够很快的把架子搭起来,终归比较简单实用。
对于移动端,React比Angular更有潜力, reactjs的模块化 + vdom + 搜索友好, 轻巧高效。