Vue、React和Angular 2.x,谁是2016年的主流?

vue、react不用多说已经成了目前比较热门的讨论话题了,angular 2.x目前已发出测试版,2016年前端的世界这三个框架中哪个会笑到最后呢?
关注者
1873
被浏览
181408

76 个回答

谁笑到最后不太好评判,但我前几天回答说,2016年Vue会大放异彩,也就是说,在2016年这一年的时间线里,有些事情是可以作个预测的,我来解释一下这么认为的理由。

1. 在2016年,不管是React,Vue,Angular(无论是2还是1),都会处于上升期,注意,甚至Angular 1.x,也还是会上升。

以上判断是基于什么作出的呢,是认为整个Web领域仍然在向应用化倾斜。新增前端需求中,应用型的类型比重高于以往,同时,部分传统行业产品的互联网化、适应多种大小的屏幕等需求释放,会导致不少团队脱离ExtJS这类框架,向以上这些东西靠拢,所以,即使是现在大家已经不太看好的Angular 1.x,仍然会保持上升。

2. 从上升速度来看,在2016年,Vue应当处于第一位,其次是React。

为什么作出这个判断呢:

第一:由于Vue的基数小于React用户,毕竟后者已经先火了一年,基数小的,增长率比较容易高。

第二:Vue的用户来源比较特别。

有一部分人,会从Angular转到Vue这条线,因为这些人可能被Angular 1.x的一些缺点吓到,想要转换路线,到底是转Vue还是转React呢?习惯了Angular思维模式的人,第一反应肯定是转Vue,而不喜欢Angular思维模式的,基本都会往React走。这两种人可以认为均等。

另外一部分人,从传统前端转入这个领域,对他们来说,侵入较少的东西更容易接受,所以在这个点上,Vue比其他两者是有优势的。

还有一部分人,从后端或者一些非前端领域转入,他们接受Vue和React的可能性差不多,因为各自能找到比较像的东西。

第三:Vue比较轻量,所以适用场景更广。

除了比较重型的应用,很轻量的页面也可以用Vue。React强制组件化的写法,但有不少比较轻量的页面,甚至一些控制台,都不太适合组件化。Angular 1.x和Vue都是可以选用组件化,也可以不组件化,仅以模板形式与数据结合。

今天我面试了一个人,这个人技能不错,他学过很多东西,也思考过很多东西,最近一段时间用React编写了一个云控制台,对组件树的层次感到很苦恼。

个人认为,在这种场景下,React是不如Vue和Angular有优势的。因为模型层很扁平,业务场景偏重表格和表单,很少存在前端的模型间的关联,这种大部分代码只不过是Todo那个Demo的堆砌而已,并不需要很组件化,更不需要在组件通信层做太多设计。

在2016年,不能使用ES2015/ES2016进行开发的前端技术栈,会是最先停止增长并且走下坡路的!

这三者,都可以使用它们,其中Angular 1.x稍微别扭一些,但也能很好地开发、运行。

为什么Angular系列的增幅不如另外两者呢,一方面自身确实因为设计缺陷错过了一些机会,另一方面,宣传没跟上,被React的气势超越了。

毛主席教导我们:宣传阵地你不占领,敌人就要占领。所以,你们懂的。

3. 从2016年底所能达到的用户量来说,三个系列(其中Angular包括1和2),应当在同一数量级。

这三者中,Vue和React的用户会是净流入,Angular会同时是流入和流出方,但流入还是高于流出的,到2017就不太好讲了。

从生命周期的角度看,这几个东西很可能同一时间被未来某个东西干掉,但是到底几年后,不知道,所以,谁笑到最后呢?我猜,是大家相爱相杀,笑着手挽手走进历史的车轮下。
先声明,作为 Vue 的作者我有利益相关,但我尽量从客观角度说说我的看法。

主流并不一定只有一个赢家

首先,我觉得框架间的竞争并不是零和游戏。虽然解决的核心痛点有重合,但适用场景还是有区别。比如 React/Vue 这样以 view layer 为核心,可以灵活选择整体架构和工具链的框架,和 Angular 2 这样大而全一站到底的框架,各有各适合的场景。Vue 因为不需要构建也能直接用,也能用在一些比 React 更轻量的场景中。撇开场景,也有开发风格的偏好问题。有些人用 React 更有效率,有些人用 Vue 更有效率,而 C#/Java 生态圈一大群人会觉得 TypeScript 和 Angular 2 让他们更有效率。最理想的情况是大家都找到最符合自己场景需求和开发偏好的框架,所以我觉得多框架的并存是合理且有意义的,不太可能出现 Angular 2 火了就没人再用 React/Vue 的情况。

技术角度

React 和 Angular 2 都有服务端渲染和原生渲染的功能(Angular 2 只是号称会有,具体啥时候会有,好不好用还不知道)。这两个东西在对此有需求的场景下,是很有吸引力的,但实际上对此有硬需求的场景占多少百分比则是个问题。比如服务端渲染的前提是前端渲染层得用 Node.js 交给『全栈』去做,原生渲染的多端代码复用率会因应用实际需求而变化,制约它们发挥的条件还是不少的,因此我个人乐观地认为这并不会影响 Vue 在整个市场中占有一席之地。另一方面,手淘已经押宝 Weex,也不排除哪天我会搞个 Vue 服务端渲染。

性能方面,这里不深入谈了,这几个主流框架都应该可以轻松应付大部分常见场景的性能需求,区别在于可优化性和优化对于开发体验的影响。这一点上我觉得 Vue 可能是最简单的,加好 track-by 就 ok 了。React 需要 shouldComponentUpdate 或者全面 Immutable,Angular 2 需要手动指定 change detection strategy,都有一定程度的侵入性。但是从整体趋势上来说,浏览器和手机还会越变越快,框架本身的渲染性能在整个前端性能优化体系中,会渐渐淡化,更多的优化点还是在构建方式、缓存、图片加载、网络链路、HTTP/2 等方面。顺道说一句,Angular 2 压缩后的大小是 500 多 kb,在移动场景反正我是不敢用。

开发体验

这方面,我个人认为 Vue 是最容易上手,最具亲和度的。工具链方面最近刚发布了 vue-cli,1 分钟搞定 webpack 配置。Vue 组件格式只要你会 HTML/CSS/JS 就能写,你要用 coffeescript 或者 less/sass 也没问题。React 的 JSX 是道坎,但跨过去之后会有一定的生产力提升。社区工具丰富,但实在太多,配置工具麻烦。CSS in JS 也不是每个人的菜。Angular 2 目前上手配置也非常麻烦,官方正在写一个 cli,但体验如何要出来了才知道。它推荐的默认语言是 TypeScript,这个对于静态类型爱好者来说是个大优点,配合 WebStorm/VSCode 体验会很不错,但也不是所有人的菜。

社区生态
  • React 是目前最成熟也最活跃的,但有一个问题就是过于频繁的方案迭代,几个月前的最佳实践可能明天就变过去式了,而 FB 官方对于最佳实践基本是采取让社区自行发展的态度,因此社区长期处于一个百家争鸣的状态,直到今年下半年才慢慢地开始合流到了 React + react-router + redux 的主流方案,并且这两天也开始讨论工具链的最佳实践。这些东西一旦稳定下来,会进一步巩固 React 的地位。
  • Vue 的社区固然比不上 React,但也不算太小。Gitter 聊天室里有 1300 来号人,国内听说也有几百人的 QQ 群,论坛上也还算有些活跃度。社区组件也在稳步发展:vuejs/awesome-vue · GitHub 当然比起 React 来说还是小巫见大巫,希望 2016 能更进一步。比起 React 来说,Vue 的一个好处就是提供了官方推荐的 Vue + vue-router + vuex + webpack + vue-loader 的全套方案,如果你不想三个月换一套,就跟着官方推荐走;如果自己有想法,那就自己整也没问题。
  • Angular 2 的社区,目前来说基本没有,到现在连文档都没写完呢,也没法有什么生态。更伤的是 ng2 和 ng1 的生态是完全割裂的。2016 年能怎么发展,要看 Google 的社区运营做得如何,但不管怎么说 Google 的影响力在那边,群众基数还是很大的...

用户来源

这一块 @徐飞 老师分析得很具体了。当然了,在中国还有另一个制约条件,那就是 IE8,这三个框架里面只有 React 支持 IE8,所以这应该会对 React 在中国的份额有所帮助... 另外徐飞叔预测 2016 年底 Vue 能和另外两个在同一数量级,我觉得还是太乐观了,我个人觉得不太可能 =_=

说在最后

看到有人说这个题是在拍马屁。React/Angular 的作者们都不上知乎,那只能认为是在针对我了,但我是理解不了问问题的人拍我马屁有什么好处... 我知道 Vue 最近在国内被提起的比较多,难免会有人觉得是不是吹太过了,对于有这样的想法的同学我有如下建议:

1. 如果你没用过 Vue,去用一用,自然会有你自己的判断;
2. 如果你用过 Vue,觉得确实吹过头了,欢迎写文章有理有节地来批评。有批评我才能改进 Vue,我会非常感谢你。
3. 如果你用过之后觉得确实不错,欢迎你加入社区贡献一份力量,一起推动项目的发展。