Car2go 的前端框架选择
作者:Sumit Kumar 原文链接:car2godevs
2016年12月,car2go 开始在柏林及汉堡组建新的前端团队开发一些内部产品。汇聚了一批有 NodeJS、前端、rails 以及其它开发经验的人,很快,前端框架的问题暴露出来了。
在2017年组建一支新的前端开发团队意味着不得不面对框架选择的争论。虽然我已经是一些框架的粉丝了,但我还是给团队机会来解决这个问题,我希望接下来的两年都不再起争论。在本文中,我会讲讲我们是怎么做的以及我们最后的选择。
问题
将拥有不同经验、背景、编程思维和技能的人聚到一个团队里,意味着他们每一个人对理想的产品、工作流和编码风格都有不同的想法。水平层次高低也意味着部分开发者选择某一框架纯粹是出于偏爱或者之前的项目中用过。而另一部分开发者则会关注商业应用以及 App 需求。我的角色是找到一个可长期使用的、社区活跃的、已熟悉的以及开发者们愿意使用的框架。
有一点很重要,这个决定不由某一个管理者做出,而是开发团队中的一些产品所有者和我一起讨论。并且我还加了一些更高的要求:比如新人上手的时间。
这一想法的目的是缩小满足需求的框架的范围,让开发者们能在一个「hackweek」内用这些框架做一些小的 App。接着,他们会围绕这些 App 进行讨论,共同客观的决定一个框架。
这项工作不能盲目的进行,所以我们定了一些规则。
Hackweek 规则
- 每一个开发者都独立的从头开发产品
- 必须选一个自己不喜欢或不熟悉的框架。这能降低认知偏差,同时能让他们更客观的评价所使用的框架。
- 所开发的产品必须能让他们深入的了解框架。不能是一个简单的 to-do demo。
- 所有人都开发同一个产品(后面会讲)以更好的比较结果。
- 每个人在 hackweek 期间都必须按预设的规则来开发产品
候选框架及标准
有些框架马上就能做出决定。比如 backbone、ember 和 angular1,都2017年了还选它们没有意义。 比较明显的社区活跃且有前景的三个框架是 reactJS,angular2 和 vueJS。 VueJS 知道的人较少,而 React 和 Angular 业界及团队已经有许多讨论了。在用其中某个框架做开发的时候,开发人员需要总结经验。
至于别的框架,需要考虑的标准有:
- 文档
- 维护者的活跃度
- 常用平台上的提问和回答
- 可用工具
- 插件或扩展的数量及质量
- Web 技术标准
- 设置开发环境所需时间(设置开发和支持工具,比如 sass ,自定义字体等)
- 代码风格,API 设计
- 可拓展性
需要开发的产品
要开发的产品很直观:在单张地图上显示所有 Car2go 的车辆(不使用任何已有的单张地图框架),数据每10s 更新一次。每一座城市/地点都能够通过 URL 及选框选中。
获取车辆的地理位置信息并显示在地图上。然后计算每一区域的车辆总数显示在该区域中——每10s 更新一次。
开发者们需要确定路由、状态管理、HTTP 请求的解决方案。并且为了应用单张地图,即使不在框架更新机制中的 DOM 也需要响应状态变化。这对于开发者探索组件的生命周期与响应等细节非常有帮助。
汇报日
某一个周五,整整一天都被用来展示作品以及进行后续讨论。每一个开发者都展示了自己的进展,讲了框架的难点和好处。在网上获得帮助/答案是否容易?文档是否完善?回答问题,渐渐开始小范围讨论,解释该框架执行我们标准的方式。比如用过 Angular 2 的开发者看了首次使用的人的汇报后,可以回应他们遇到的问题,而汇报的人也能了解到另一种解决问题的办法。
有一些人在初次尝试之后就对其所使用的框架表现出极大的热情。有一些人简单的说他们用的框架不错、用它来做开发没问题。还有一部分人对自己使用的框架感到失望,不推荐使用该框架。
最后,团队共同客观的决定一个用起来舒服的框架作为最终选择。
我们的选择及一些有趣的评价
我想分享下汇报日中产生的一些有趣的争论。注意这不是要罗列各框架的优劣点。
一些人建议不要用 VueJS ,因为 StackOverflow 上没有足够多相关的问题。而另一些人认为这恰恰说明 Vue 的文档完备且 Vue 论坛活跃。当然,到目前为止,VueJS 的文档的确是最完善的。
TypeScript 也引起了较大的争议。最终,团队决定采用标准 ES6 以免给后续接手我们 app 的开发团队留下太多坑。毕竟,我们所有人都不想接手一个 CoffeeScript App。但以防万一,我们用 Flow 做类型检查。
至于 Angular 2,尽管在使用 TypeScript 时, Angular 2 有一些好用的工具,但是 「hackweek」 中,它没有获得新的支持者。它的文档,尤其是 JavaScript 文档,不完善、冗长且令人迷惑。开发者们需要更多的时间来上手和使用它。而且它诡异的发布周期让人对其未来没有任何信心。这时候第4版(!)都发布了。
JSX vs Directives - HTML in JS vs Logic in HTML 也是一个有趣的争论点。最后,团队得出结论: directive 让 HTML 更具可读性,并且大家有使用 Angular 1 的经验,所以对 directive 更熟悉。VueJS 虽然支持了 JSX 但是它对 directive 的处理也非常优雅。
ReactJS 和 VueJS 彼此类似,但是在文档和 API 的优雅程度上,VueJS 更胜一筹。
最后说一下,所有的框架都解决了我们的问题,而且所有开发者都有所偏爱。所以不要直接采用我们的决策或者将其作为一个放之四海而皆准的事实。而是将它看作是我们的开发者比较赞同的意见。
未来
frontend landscape 每隔一周介绍一款新的框架(hello,moonJS),开发者们显然想试试这些框架。在可预见的未来,我们会用 VueJS 开发和主体业务有关的 app,而在一些概念验证性产品及仪表盘 app 中会使用新出现的框架。
总结
从参与 「hackweek」 的开发者、管理人员和其它观察者的反馈来看,这一周对我来说相当成功,虽然开销有点贵(这一周啥也没开发)。但没让团队走上另一条道路(技术问题),也打开了更轻松的进行团队合作的大门。如同移交 app 给其它团队,分享知识的最佳办法:通用组件。
翻译:YoungZ 部分翻译采用意义;水平有限,翻译中可能有微小错误(但不影响掌握文章大意)请指出。
Car2go 的前端框架选择相关推荐
- Springboot单体架构搭建|第四章 前端框架选择和菜单管理
第四章 前端框架选择和菜单管理 前言 vue-element-admin 改造vue-element-admin 菜单管理 用户&&角色&&菜单 总结 前言 该架构是参 ...
- 使用ABP打造SAAS系统(2)——前端框架选择
一.流行框架比较 作者用过的前端框架不少,曾经还在一个项目中同时使用两套框架控件(年少无知.效率特慢),所以可供选择的前端框架有不少: easyui: 优点:非常成熟的框架,基于iframe可以进行多 ...
- 网贷系统架构——前端框架的选择
一.网贷系统对前端的要求 网贷,又称P2P网络借款.P2P是英文peer to peer的缩写,意即"个人对个人". 网络信贷起源于英国,随后发展到美国.德国和其他国家,其典型的模 ...
- 前端UI框架选择区别对比推荐
UI选择务必慎重,货比三家. 弱水三千只取一瓢:弱水三千只取一瓢,源起佛经中的一则故事,警醒人们在一生中可能会遇到很多美好的东西,但只要用心好好把握住其中的一样就足够了 老牌构建于jQuery框架之上 ...
- 如何选择合适的前端框架,告别选择恐惧症
将 package.json 中的 Ionic 版本改为 2.0.0 的时候,我就思考一个问题.这个该死的问题是--我到底要用哪个框架继续工作下去. 刚开始学习前端的时候,SPA(单页面应用)还没有现 ...
- 从零开始搭建仿抖音短视频App-前后端开发模式,前端框架的选择、前端项目搭建
目录 前后端开发模式 传统JavaWeb开发模式 前后端分离模式编辑 前端框架的选择-UniApp介绍 内网互通原则 运行到iphone与Android 前后端开发模式 传统JavaWeb开发模式 ...
- 前端开发UI框架选择---帮你解决忧愁
近几年随着 jQuery.Ext 以及 CSS3 的发展,以 Bootstrap 为代表的前端开发框架如雨后春笋般挤入视野,可谓应接不暇.不论是桌面浏览器端还是移动端都涌现出很多优秀的框架,极大丰富了 ...
- 2017 年了,这么多前端框架,你会怎样选择?
图片来源: Ember.js: 解决你框架疲劳的良药 过去七年来,前端框架生态系统发展蓬勃.我们已经学了很多关于构建和维护大型应用的知识.我们看到了很多新想法的出现.其中一些新想法改变了我们构建 We ...
- 程序员Web面试之前端框架等知识
基于前面2篇博客: 程序员Web面试之jQuery 程序员Web面试之JSON 您已经可以顺利进入Web开发的大门. 但是要动手干,还需要了解一些已有的前端框架.UI套件,即要站在巨人肩膀上而不是从轮 ...
- Web前端框架与类库的思考
说起前端框架,我也是醉了.现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利. 当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉.网站技术是为业务而存在的,除此毫无意义,框架也是一样.在技 ...
最新文章
- tftp怎么给服务器传文件,TFTP文件传输工具使用
- javascript的输入与输出
- VTK:PCA用法实战
- 国科大高级人工智能12-博弈
- ios开发循环网络请求_如何简化网络请求接口开发
- 【榜首团队专访】冲刺复赛,他们有绝招
- 二叉树的创建和遍历(递归和非递归),查找最大值,树的高度
- 揭秘Facebook官方底层C++函数Folly
- 校园网双出口配置实例
- 设计模式之观察者模式PHP实现
- 安装mysql的zip包
- linux中at重定位命令,readelf命令_Linux readelf 命令用法详解:用于显示elf格式文件的信息...
- shm 共享内存 android,共享内存
- python截图搜题_新手篇之实现Python自动搜题
- 【天线的主要技术指标及其含义-带宽 】
- C++程序练习-1008:Maya Calendar-玛雅日历
- 企业征信(尽职调查):采集数据网站一览表
- 阿里云香港云服务器ECS适合什么场景?
- 'dict' object has no attribute '_txn_read_preference' Sort exceeded memory limit of 10485760
- 基于 Servlet + jsp 的企业财务管理系统设计与实现
热门文章
- Python3.6下安装爬虫scrapy框架的安装步骤以及遇到的诸多问题
- 利用IDLE对 dem进行批量拼接处理
- python的sorted函数和operator.itemgetter函数
- python集合和序列解包
- 【ArcGIS|空间分析】地理编码
- php存sqlite图片,SQLite数据库如何存储图片/语音
- Flutter之ScrollView简析
- arduino 可以用c_lt;开源项目gt;Arduino+STM32+SIM868 用一天创造一款可以定位的GPRS无线开关...
- 一个酷炫的音乐播放界面
- python基础知识——文件