在Rever我们刚刚发布了一个新的Web客户端是基于vue.js的版本。经过641个提交和16个星期的紧张开发,我们感到非常自豪,我们做了一个正确的决定。
8个月前,我们的Web客户端使用了Angular 2,确切地说,它使用的是Angular 2 β9。但是产品的外包公司和我们从来没有完全满意过,在很多的方面包括从用户体验、UI架构等等,并且他们说在这一定的程度上与Angular 2本身有关。
在我继续说明我的想法之前,我承认,Angular 2 β9和Angular 2 不是一个相同的产品,但这恰恰也是其中的问题之一。从beta9到2.0.0有8个测试版本,8 RC和2.0.0版本,17次版本升级。我们曾尝试从Beta 9升级到2.0.0但发生太多的事情,升级过程并不平滑。所以,大约在那个时候,我们开始质疑Angular 2 作为我们选择的框架是否正确,否则Angular开发的团队决定开始研究Angular 4。同时他们还承诺不会有太大太激烈的升级过程,这就意味着,当我们完成升级到Angular 2.0.0后,我们还需要另外一个升级。真是浪费时间,我们的资源毕竟是很有限的。
主要是我们不太喜欢Angular 2采用了Typescript。我知道Angular 2也可以使用JavaScript。但从我的理解来说如果它们已经决定使用Typescript,那么使用纯JavaScript 开发时使用 Angular 2就不再是最理想的途径。你试想一下,这也许意味着我们需要使用Typescript来把项目全部重写。
我不觉得Typescript有所说的那么大的实质价值,更糟的是我们注意到,我们的编码速度降低了。JavaScript像定义一个简单对象这样很容易做到事情如果在Typescript上的话做起来会更复杂。我强烈建议你在开始使用Typescript时阅读下面的相关的文章。对绝大多数人来说,Typescript并不是好的解决方案。
我仍然记得使用Angular 1是多么容易使用,当然它也有它自己的问题,但与其他框架相比,它工作得很好,在某种程度上,Angular 2迷失了方向。我对Angular 2的结论很简单,Angular 1和Angular 2唯一的共同点就是它们的名称,本质上它们是完全不同的框架。
所以考虑到我们需要进行17个版本的升级而且是在非完全测试的系统上,很多来自商业上的需求需要编写新的代码来实现,很多bug和写得不太好的代码,而原来的开发商都已经不在开发小组里面了,只有一个开发人员那就是我,还有许多其他的责任。使用Typescript的过程中,直到我看了一个正确的文件才发现是因为使用了测试版本的问题,当Angular 2 升级到 Angular 4 的时候,负面问题清单便迅速变大起来。
我们做出了一个决定,如果我们非要花那么多的时间升级,那我们应该先看看我们是否还有其他选择。我们马上就着手去做,并且找到了解决方案。
React
第一个显而易见的选择是React,因为每个人都在这么做,而那些不用它的人也正在谈论它。所以这是一个选择,当然知道facebook在它背后,这是有帮助的。然而,React本身并不是一个框架,你需要添加额外的东西才能使它在你的项目发光发热。
vue.js
Vue.js是一个新的成员,我从来没有听说过它之前,虽然刚刚发布了版本2,我们开始看这是不是也是个可以使用的不一样的选项。起初它引起了我们的注意,但看起来很有风险。
决策过程
我们首先开始确定我们的做这个决策的依据是什么。我们知道我们想要的框架需要满足以下几点:
首先它应该是稳定的。
有一个强大的社区或一些大玩家
有很好的文档或很多问题在*上可以找到解决方法
学起来比较容易
与Bootstrap整合的很好
比较小
在理想的情况下,还允许我们重用代码。
编码速度比较高效
响应性
是基于组件设计的
当我们的决策依据有了以后,我不得不动手试试,所以我用几天的时间来针对React和vue.js来审查每一个决策依据,这个过程中有任何不明白的就去谷歌寻求帮助。由于我对他们中的任何一个都基本上是一无所知的,在进行了两天的审查结束的时候,我会重新评估要迁移的实际项目中需要我重写的是那些部分。
下面是我选择重写的部分:
一些基本API调用
两个不同页面的布局。
有关用户资料响应性的部分
登录表单和一些内容表单
一个bootstrap的模态框
我很惊讶,在这几天里我真的向我的团队成员和公司的CTO证明了,使用Vue.js作为一个我们选择的框架可以走的很远。我很好的理解了vue.js的基本概念,定义友好、可扩展的架构,但最重要的是,我真的很喜欢用它写来代码,它这方面做得很友好,我觉得我做得比使用React好。
React比我想象的要难很多,如Redux和MobX之间选择,还有更多的疑问不止这一个问题需要进行选择,而Vue.js和Vuex的框架是整合在一起的。这样会很简单,因为当对这个框架没有使用经验时,一个框架有一个官方的库会给开发者提供更多的信心。顺便说一下,我觉得Vuex比Redux学习起来感觉更轻松,就像所有的学习曲线中表示的那样。
JSX也是一个问题,因为我们不能重复使用HTML代码,而且Vue.js在一定程度上不允许我们这样做。Vue文件实际上是工作的非常好,因为我也不喜欢内联模板。React混合JSX/HTML用JS代码,我不太喜欢这样做,因为我坚信关注点隔离,恕我直言这看起来也不爽。
编码速度
编码速度是vue.js成为我们的选择的一个决策依据,不用学习JSX对我来说是巨大的帮助。后来,另一名开发人员加入该项目,并在进行了大约1小时的培训会议后几个小时内就为该项目做出了贡献,这一速度也得到了证实。
这对我们是非常重要的,你可以马上打开Vue文件看到它。它包含一个带有HTML和标签的模板部分,看起来与Angular 1相似,所以如果你用过Angular 1的话,那你会有一种似曾相识的感觉。一个vue文件也有样式和纯JavaScript的部分,实际上你使用JavaScript,你只需要学习一些关于vue.js的基础知识就可以充分理解他们。了解vue.js的基本内容如方法,计算属性、数据和创建等等,你明白你所需要的大约90%的时候就可以开始编码了,真的很简单。
文档
有了适当的编码速度,我们需要良好的文档。vue.js的文档是一流的。编程指南、示例、问题和API都记录得很好,覆盖了我们在开发过程中发现的所有疑惑。我们担心许多问题需要找中文文档,但事实并非如此,一切都是用英语提供的。
问身边的人
vue.js经过超过一周的考虑,让我惊讶的是,看上去真的很好,问身边的人是没用的,因为没有人用过vue.js,我得到的唯一评论是,“看起来很酷,但我没有用它”。反应最多的是React,Angular 2只在一个遥远的第二位出现。
我开始寻找有Vue.js经验的本地人才,我发现一些人用的真的很好,所以我开始认为我并不孤单,我的技术圈可能太小,我应该足够重视这件事,事实上,我不知道任何人使用vue.js在生产工作中。
手机
当我们对vue.js和react进行比较时,我们也在考虑重写我们的移动应用程序。React Native看起来像一个很好的选择。对React 来说试图做一个原生的移动应用框架,这是一大利好,所以Web和APP客户端之间代码重用的可能性是一个巨大的加分项,但我决定不去考虑可能或不可能发生的。毕竟,从我的经验来说,用Node.js使用浏览器和服务器之间的那部分代码是微不足道的。
许可
我写这篇文章的时候,有大量因为Facebook改变了对BSD +专利许可。根据Facebook的说法,这个许可证是为了保护他们免受专利流氓的侵害。这在我们的决策过程中不是基本依据,但我很高兴我们没有采取React的方式,因为任何与许可有关的噪音都不是你想要听到的噪音。
最后,Facebook背后的React可能会让项目的多一个责任,而不是一个助力,这就是为什么通常有独立的基金会或组织负责一个成功的开源软件项目。Facebook应该做正确的事情,以IBM为例,当IBM收购了Strongloop,他们捐赠的express.js对Node.js基础这样一个重要的软件。来自社区的压力和IBM的意愿确保了软件的连续性。Twitter是另一个很好的例子,他们通过麻省理工学院MIT许可证上发布了Bootstrap,没有人谈论Bootstrap的许可证问题。
最后的话
在我研究过许多网页后才作决定,一张图引起了我的注意,在调查中,Sacha Greif @ sachagreif JavaScript是每年的开发商满意度调查。我承认,作为一个作者,这是不科学的调查,但它确实提供了一个很好的信息量,这佐证了我们在比照的决策依据的时候,有一个清晰的画面,特别是Vue.js在我们研究的开始前我们一无所知。您可以在下面的链接中读取JavaScript的状态。
总的来说,vue.js是我们评估的赢家,它已经回答了Stack Overflow的很多问题,最明确的官方文档,最小的代码库,集成Bootstrap等三个重要的决策依据,而且也有像Laravel和阿里巴巴这样的大公司或者强大的项目支持。没有一个像React那么大的社区不是一个真正的问题,因为它已经足够强大了。
使用Vue.js是正确的选择,我花了一点时间去说服我自己,感激我的CTO总是问我正确的和棘手的问题,迫使我100%确认我的决定,如果我犯了一个错误,我就会后悔。我认为他只有一小部分是不确定的,直到他写了一个完整的组件并发现它确实是很容易的。
最后,整个选择决策过程确实对以后的开发很有帮助,但我能学得这么快的事实确实产生了巨大的影响,如果你愿意,我把它叫做直觉,但真正快的学习东西让我对我在实际开发过程中遇到更复杂的问题充满信心。
我并不是说React是一个糟糕的选择,我对React庞大的社区感到惊讶,这是一个很好的理由,但是jQuery更大,对我们想做的项目来说,这并不是一个最好的框架/库。
vue.js势头良好,我们看到了它的发展,这会保证我们做出了正确的选择。
我们简单得价值通过Vue.js实现了,这还体现在简单的学习曲线,特别是在文档和编码速度。如果您仍然困惑或需要更多的论据,我鼓励您去阅读Vue.js官网上的与其他框架的比较。
作者Luis Elizondo是Rever的后端和前端Web开发工程师。他还负责自动化、基础设施、系统架构和安全。他有超过10年的工作经验与多种编程语言,设计应用程序架构,自动化流程和操作,并管理服务器上的云。
本文由汇智网的小智翻译。