、 译者按: 经过使用Angular的经历,做者已经彻底转为Vue粉了!咱们Fundebug目前仍是用AngularJS 1,坦白说,学习曲线蛮陡的。javascript
为了保证可读性,本文采用意译而非直译,而且对源代码进行了大量修改。另外,本文版权归原做者全部,翻译仅用于学习。html
在Rever, 咱们刚刚发布了使用Vue.js彻底重写的网站。通过16周紧张的开发,总共commit了641次。如今回过头来,感慨当时对框架的选择是正确的。前端
在8个月以前,咱们还在用Angular 2作网站开发。更加精确地一点,咱们用的是Angular 2 beta 9。坦白的说,这个产品当时是由一家外包公司开发,而咱们一直对它的方方面面都不满意。无论是UX/UI,仍是架构上,甚至Angular 2自己。vue
在我继续抱怨以前,我要认可Angular 2 beta 9和Angular 2.0是彻底不一样的产品,但这也是Angular的一个问题所在。从beta 9到2.0.0,有8个beta版本, 8个RC(release candidate),以及2.0.0自己。也就是说,若是要更新到2.0.0,须要升级17个版本。咱们也尝试过从beta 9升级到2.0.0,可是由于太多的依赖都破坏了,致使整个更新很是的复杂。同时,咱们开始反问本身选择Angular 2是否正确,由于Angular开发团队已经着手Angular 4了。当咱们好不容易彻底更新到2.0.0的那一天,又须要考虑如何更新到Angular 4了。太浪费时间,太浪费精力了!java
咱们曾经不喜欢,如今依然不喜欢的就是Angular 2 默认使用Typescript做为开发语言。我知道Angular 2能够直接使用JavaScript,可是在Angular 2中使用JavaScript几乎等于重写整个项目。我不认为Typescript为开发增长了附加值,甚至更加糟糕了。我发现咱们的编码速度反而变慢了。在JavaScript中很简单的事情,好比定义一个对象,若是使用Typescript就会变得复杂。在你决定使用Typescript以前,我强烈建议你读读下面这两篇文章。Typescript并非每一个人的最佳选择。react
我依然记得使用Angular 1是多么的简单。虽然它也有很多问题,可是和其它框架比起来,真的容易。Angular 2却把Angular的优势丢弃了。对于Angular 2, 个人结论很简单:Angular 1 和 Angular 2就是雷锋和雷峰塔的关系。后端
因此,你想一想咱们须要在一个未通过测试的系统上更新17个版本,同时还要实现新的功能,如今的代码自己有着一大堆的bug,代码质量不好,毕竟当时的开发者几乎都不在团队里面了,只有我一个同时要应对不少问题。我为了正确使用Typescript,须要处处去找正确的文档。Angular 2已经开始升级Angular 4,然而我连Angular 2都还没升级成功。太多的负面因素快速累积起来。前端框架
所以,咱们作出了决定:若是升级花费太多的时间,咱们就应该考虑其它方案了。angular2
React:第一个最明显的选择是使用React, 由于每一个人都在使用它,若是没有,那么也在讨论它。并且,它有Facebook在后台撑腰,不担忧维护问题。可是,React自己不是框架,若是要使用,你须要添加额外的东西。架构
Vue.js:Vue.js是一个新选手,我以前从未据说过。尽管在咱们调研前端框架的时候,它的版本已经更新到2.0了。Vue.js很是有吸引力,不过也以为有点冒险。
咱们将全部的指标列了出来:
接下来,我亲自使用React和Vue.js来给出一个评估,而不是经过Google告诉我答案。在此以前,我历来没有用过React和Vue.js。咱们他们重写了以下部分:
仅仅使用了几天,我已经被Vue.js惊讶到,我已经能够完成一个演示Demo给CTO和团队其余成员。我已经很好的理解了Vue.js的基本概念,定义可扩展的架构。最重要的是我很是喜欢使用Vue.js的方式写代码,我能够感受到明显比React快。
使用React比想象中难,要在Redux和MobX中作出选择并无只有一个完美整合的方案好,就像Vue.js搭配的Vuex。若是对于一个框架没有使用经验的时候,可让最开始的决策变得简单。若是你知道这个框架有官方的库,将会更有自信。同时,我以为Vuex的反应比Redux快,不够也许只是我的感受。
JSX也是一个问题,由于咱们不能重用HTML,不够Vue.js在某种程度上支持咱们这么作。 我不喜欢内联模板(inline template), 而React将JSX/HTML和JS混合到一块儿。我一直坚信将不一样的功能部件分开才是正确的作法,混到一块儿看上去太丑了。
使用Vue.js的编码速度远远超过React,由于不须要学习JSX。并且,一个新的开发者加入团队以后,他只须要一个小时的培训就能够上手工做。这一点对咱们很是重要。打开一个Vue文件,里面包含了使用HTML和Angular 1类似的标签。一个vue文件还包含样式和JavaScript部分。你只须要学习一点点Vue.js的基础知识就能够理解它们。
为了快速开发,好的文档也很重要。Vue.js的文档简直太赞!指导、示例、问题和API文档都很是清晰。在开发中遇到的问题几乎均可以经过文档找到答案。咱们开始担忧不少问题都是中文的,结果发现全部的资料都有英文版本。
通过一周的考虑,我认为Vue.js很是不错。但是周边的人都没有用过,没法给出中肯的建议。我获得的惟一一个意见就是“看上去很酷,不过我历来没用过”。React最受你们关注,Angular 2其次。我开始寻找本地是否有使用Vue.js的开发者,结果然的找到了,让我以为不在孤单。并且个人技术圈子原本就很小,因此没有注意到谁在生产环境使用Vue.js。
在咱们考虑选择Vue.js仍是React的时候,同时有考虑到要重写咱们的移动端。React Native看上去是一个不错的选择。若是咱们真的决定用React Native作移动端,能够复用桌面端和移动端的代码,对决定选择React有很大的加分。不过,我最终决定不考虑这个状况也许不会发生的状况。从个人经验来看,使用Node.js已经让我能够在前端和后端重用很是多的代码。
在我写这篇博客的时候,网上有不少关于Facebook将React的版权许可改成BSD+Patent的讨论。根据Facebook的解释,这个版权许可防止他们被专利流氓(patent troll)。虽然这不是影响咱们决定的一个主要因素,可是若是你使用React,而React有相关版权问题,你也不想听到。
换个角度,Facebook能够说是React的一个负担,而不是助力。这也是为何一个独立的基金或组织来维护开源软件项目更好。IBM作了一个很好的示范,当他把Strongloop买下来之后,把Express.js捐给了Node.js基金会。来自社区的压力和IBM的期待,使得软件一直很好的维护下去。Twitter也是一个很好的例子,他们使用MIT协议发行Bootstrap,这样再也没有人会讨论Bootstrap的版权问题。
在我作出最终决定以前,我在网上调研了好久。有一张开发者对现有JavaScript状态的调查吸引了个人注意力。我认可,做者并无用很是严谨的科学的方法去调研,可是却给咱们提供了不少很是有用的信息。若是你想阅读原文,请点击The State Of JavaScript: Front-End Frameworks。
衡量指标 | Angular 2 | React | Vue.js |
---|---|---|---|
稳定 | 是 | 是 | 是 |
有强大的社区 | 是 | 是 | 还不够大 |
后盾 | Laravel和阿里巴巴 | ||
文档清晰 | 是 | 是 | 是 |
容易上手 | 通常,Typescript难学 | 还能够 | 是 |
能够集成Bootstrap | 是 | 是 | 是 |
大小 | 566K | 139K | 58.8K |
易复用 | 是 | 只有CSS | 是,HTML和CSS |
编码速度 | 慢 | 通常 | 快 |
反应速度(Reactivity) | 还能够 | 快 | 快 |
基于组件 | 是 | 是 | 是 |
总的来讲,在咱们的评估中,Vue.js胜出。在StackOverflow有不少问答,官方文档十分清晰,代码体积小,和Bootstrap完美集成,由Laravel和阿里巴巴支撑。虽然社区还不够大,可是已经足够大了。
选择Vue.js是一个正确的选择,虽然我花了很多时间来讲服CTO。我很感激他老是提出一些有用的难问题,使我能够保证个人决定是100%正确。若是个人决定真的作错了,将会很是后悔的。我想直到他亲手写了一个组件发现至关的容易才真的彻底确信Vue.js的能力的。
我没有说React很差,它拥有那么大的一个社区,我感到很是震撼。它有它的好处,jQuery的社区更大,但没有使它成为一个咱们想要使用的好的框架/库。咱们想要简单,而Vue.js拥有这一点。若是你仍是不肯定,能够读一读下面这篇文章:Comparison with Other Frameworks。
版权声明:
转载时请注明做者Fundebug以及本文地址:
https://blog.fundebug.com/2017/09/20/why-we-moved-from-angular2-to-vue/