技术选型应该对很多程序员都不生疏了,无论是大到技术框架、编程语言,还是小到工具库的抉择,都属于技术选型的范畴。集体认为技术选型应该依照以下四个指标进行抉择:
- 可控性
- 稳定性
- 适用性
- 易用性
因为没有对立的叫法,所以以上四个指标的名称是我本人定的。上面就让咱们一起来深刻理解一下如何进行技术选型吧。
可控性
可控性是技术选型中十分重要的一个指标。可控,就是指如果这门技术因为 BUG 对我的项目造成了影响,团队中有人可能解决它,而不是期待官网修复。作为技术团队的负责人,肯定要是可能兜底的那个人。如果团队解决不了,你必须可能解决。
例如一些公司外部独有的因为“个性化”需要产生的各种魔改版 Vue、React,就完满体现了可控性。
稳定性
稳定性,示意一门技术更新迭代比较稳定,不会有特地大的批改,比拟靠谱。即便有,也很容易做到向后兼容(迁徙简略、老本小)。
做为一名程序员,我想大家都有过这种想法。心愿本人在做我的项目时能用上最新、最热门的技术,这样就能够一边工作一边学习了。可是现实很美妙,事实却是骨感的。新技术往往意味着不确定性,很有可能一步一坑。所以不倡议在外围我的项目中应用新技术。
应用成熟稳固的技术,意味着你的我的项目比拟平安。在这一点上有两个很典型的反例,那就是 Angular 和 python。例如 python2 降级到 python3,除了语法、API 不兼容之外,python3 的各个版本之间也有差别,直到现在才逐步稳定下来。
从稳定性上来看,该如何进行技术造型呢?能够依据以下四点来进行抉择:
- 社区是否沉闷、配套插件是否丰盛。
- 是否常常保护,能够通过 git commit 查看。
- 官网文档是否齐全。
- 更新是稳固、小步的迭代,而不是十分激进的更新。
方才说到不倡议在外围我的项目中应用新技术,但为了团队成员本身的倒退抑或为了其余起因,是能够尝试一下新技术的。但肯定要在边缘我的项目或者小我的项目上进行尝试,尝试完如果发现这门新技术非常适合你们的我的项目,那就能够进一步思考是否在外围我的项目中应用了。
适用性
适用性,是指须要依据业务场景和团队成员来抉择技术。
业务场景
生命周期
从我的项目的生命周期来看,并不是所有的我的项目都须要做到滴水不漏的。例如节假日特定的流动页面,生命周期只有一两天。这种页面就算用 JQuery 写也是能够的,惟一的要求就是快。
与之相同的是,公司须要长期保护的外围我的项目。它们须要应用成熟稳固的技术栈,在开发语言上也要应用 TypeScript 而不是 JavaScript。
兼容性
因为我的项目必须在各种各样的设施上运行,所以兼容性也是一个须要思考的点。
web 我的项目须要思考不同浏览器的兼容性,app 须要思考 IOS 和 Android 的兼容性。除了必须保障不能有死机、白屏、卡顿等显著 BUG 外,款式也须要尽量保持一致。
团队成员
团队成员不肯定所有人都应用雷同的技术栈,在这一点上须要衡量大家的长短处进行抉择。
但我倡议尽量将团队成员的权重放到比拟低的地位,抉择约束性比拟强的技术是一个更好的抉择(如果团队成员不会,就让他学)。要用久远的眼光来为团队思考,太过自在的技术,往往会造成劫难。例如应用 TypeScript 曾经被很多大公司和开源我的项目证实过是一个更好的抉择。
易用性
易用性,顾名思义就是这门技术好不好上手,容不容易了解。如果两门技术各方面指标及利用场景差不多,易用性强的将成为赢家。
最典型的例子就是 Angular 和 Vue。Angular 学习曲线平缓,须要比拟长的学习工夫;而 Vue 在熟练掌握 JavaScript 的状况下,看文档一两天就能上手干活。
从 Google、百度的趋势图就能看进去,它们在国内的受欢迎水平有相当大的差异。
易用性,决定了你的团队好不好招人,这一点对小公司和不在一线城市的公司来说十分重要。我在天津(二线城市)工作快 4 年了,招前端的基本上每个公司都要求会 Vue,而要求会 Angular 的根本没有。
小结
如果同时综合以上 4 点来思考,该如何做技术选型呢?我倡议依照以下程序来做抉择:
- 必须可控。
- 外围我的项目必须应用成熟稳固、牢靠的技术栈,边缘小我的项目能够应用新技术给团队成员练手或者踩坑。
- 在第 2 点的根底上,再按适用性做抉择。
- 在第 3 点的根底上,再按易用性做抉择。
为了帮忙大家了解,我画了一个流程图:
尽管说前端目前只有三大框架能够抉择,但技术永远是在倒退的,框架也是在一直的更新迭代。学会如何进行技术选型,则不论当下风行的是什么技术,都能够缩小你在进行技术选型时可能会犯的失误。
参考资料
- 技术选型指南
带你入门前端工程 全文目录:
- 技术选型:如何进行技术选型?
- 对立标准:如何制订标准并利用工具保障标准被严格执行?
- 前端组件化:什么是模块化、组件化?
- 测试:如何写单元测试和 E2E(端到端)测试?
- 构建工具:构建工具有哪些?都有哪些性能和劣势?
- 自动化部署:如何利用 Jenkins、Github Actions 自动化部署我的项目?
- 前端监控:解说前端监控原理及如何利用 sentry 对我的项目履行监控。
- 性能优化(一):如何检测网站性能?有哪些实用的性能优化规定?
- 性能优化(二):如何检测网站性能?有哪些实用的性能优化规定?
- 重构:为什么做重构?重构有哪些手法?
- 微服务:微服务是什么?如何搭建微服务项目?
- Severless:Severless 是什么?如何应用 Severless?