阅读的文章:Why I Ditched Angular for React
AngularJS被人诟病最多的地方就是性能,学习曲线太陡。
DOM操作
因为AngularJS严重依赖于DOM,而DOM的操作是非常昂贵的。AngularJS应用在启动后必须先遍历一边DOM,进行directive
的compile
,所以需要当一个页面的节点超过一定数量后,这个过程会变成一个痛点。
双向数据绑定
双向数据是一把双刃剑,在ECMAScript 5中并未提供原生的数据/对象变化监视。所以,AngularJS采用了一种称为dirty checking
的机制来跟踪数据的变化。当在任意一个$scope
内更改了数据,Angular将触发了$digest
,这个过程会导致性能问题。考虑应用绑定了一定数量的数据,一次$digest
的耗时将很可观。
独立的应用循环
AngularJS拥有一套自己的应用循环,这就意味着外部的更改必须通过某种方式来通知AngularJS。当与第三方库集成时,必须调用AngularJS的$apply
方法,以触发$digest
。
ReactJS
React将自己定位在MVC
模式的V
。React更鼓励适用单向的数据绑定(one-way data flow)。借助于Virtual DOM
,React在性能上会显著优于AngularJS。同时作为V
,React提供了一个封装component的方式,类似于AngularJS中的directive
。
迁移到React?
与AngularJS不同,React作为V
仅专注在相应层面的实现。举例来说,AnguarJS中提供的模块化,$http/$q
、Router等功能,在React中皆没有。但可以接住于其他的库来实现。
附:Quora上一个关于AngularJS和React的详细比对文章