我是这样让公司使用Node.js的
来源: https://juejin.im/post/5d033550f265da1b9253d6e3Node.js是一门用javascript编写服务端应用的语言,具有非阻塞、高I/O的优点。相信很多前端开发工程看到这个描述就跃跃欲试了。终于有机会跟后台开发一争天下,推翻程序员鄙视链理论指日可待啊(c>c++>java/.net>前端)。
然而事实上,Node.js已经走过了10年了,并没有在服务端应用方面掀起太大的波浪,反倒是在包管理,工具化方面应用更为广泛,如npm仓库、webpack等。因此除非你们团队本来的后台技术栈就是Node.js,不然要想在服务端说服公司使用Node.js还是需要费些心力的。
笔者所在公司使用Node.js已经有两年多,从一开始使用Node.js替代Jsp做前后端分离,到使用Node.js承担公司部分创新性专案积累了一定的经验。接下来,本文将描述说服使用Node.js面临的难题?如何找准立足点并让领导接受使用Node.js?大家有什么意见和想法欢迎留言讨论。
本文写于19/06/14。也许未来说服使用Node.js并不是一件很难的事,本文所描述的也就不适用了。
为什么想用Node.js做服务那么难
在大部分的公司,后台服务基本是由java、c++等语言把持。因此想用Node.js去做服务面临着各种困难,主要原因如下:
1. 成熟的后台体系
以java为例,经过长时间的发展和线上验证,java的生态相当完善。在当下微服务体系大行其道的背景下,各种微服务解决方案就像是为java而生的一样,例如使用Spring Cloud体系,你能搭建出一整套的解决方案。而Node.js在这块还属于初级阶段。幸运的是,这类解决方案基本提供了标准的接入方案,Node.js等非java体系语言也能接入。然而接入门槛较高,如java的接入提供了相关sdk,只需要编写相关的配置档案即可,Node.js是需要自己编写程式码实现的。
另外,小公司为了降低运营和维护成本,一般只接受一种后台语言,java体系下,问题的排查和解决比较容易找到资深的工程师解决。
2. 前端人员的相关技术素养的缺乏
后台开发对算法、资料界面、设计模式、逻辑分析等能力的要求较高,较为严谨。而传统意义上的前端开发,只需对使用者负责就可以了,相信大家也听过Don\t let me think这句话。前端面向用户体验负责,偏向于感性。做好这一点,也能成为一名优秀的前端开发工程师。但是如果想让Node.js在服务端有所应用,相关技术能力是需要补足的,所幸向周围的大牛学习和多逛技术论坛可以弥补这点。
3. 大环境下对于JavaScript和前端的刻板印象
毕竟前端的入门门槛比较低相信这句话作为前端的同学应该都有所有耳闻。并且JavaScript是一门弱型别语言,在后端使用不严谨(可以使用Typescript替代)。改变刻板印象是一个长期的过程。这里也感谢国内大厂,线上环境对于Node.js的大规模使用,正改变着人们过往的印象。
4. Node.js生态的不确定性。
这个主要是因为两个方面的原因:
node.js的作者又弄了个新的deno,打击了大家使用Node.js的信心;npm包虽然数量庞大,但安全性未经认证。总之,使用Node.js做服务端开发语言,需要有强大的决心。但是决心是不够的,我们使用一门新的技术,需要找准立足点。
立足点——为什么我要用Node.js
当我们终于鼓起勇气,向领导安利Node.js的时候,我们总不能说,“你看,某某厂也在用”吧。凡事预则立不预则废。我们得找准立足点,让领导明白这个只有前端的同事能做,或者做的更好。我觉得可以从以下几个方面进行论述。
1. 一切为了使用者——提升使用者体验
前端开发理应为使用者体验负责。
曾几何时,前后端开发的分界并没有那么明显,大部分的前端页面由后台人员兼著做,一套JQuery+BootStrap便可走天下,例如J2EE、PHP、ASP.NET等。但随着前端框架的出现(Angular、React、Vue),其复杂程度和上手难度已经不是后台能开箱即用的了。慢慢的,现在的后台人员“不懂”前端,关于体验前端更有发言权。
同时,复杂的前端框架也让首屏时间越来越长,白屏也将导致使用者流失,需要我们做优化,常见的手段有如SSR,PWA。而这些如果不借助与Node.js的能力,是很难实现的。
2. 职责明确——提高开发团队生产力
服务端设计的界面应面向通用服务,趋向稳定,后端团队理应关注于服务本身,并尽量少的关注于UI。一套界面,多端适用。
面向UI的界面应交给BFF(Backends For Frontends),实现资料聚合、裁剪和格式化。秉著服务自治(谁使用,谁负责、谁开发)的原则,这一层应该交由前端团队负责。
3. 团队赋能——提高前端团队的想象和成长空间
前端是一个需要不断学习,不断充电的领域,各种新的技术在不断涌现并成为主流,如PWA、GraphQL、SSR等,需要我们去尝试。Node.js的使用能让团队在让这些技术落地,提高团队活力和技术水平。一个有想象空间的团队,所能创造的东西的是不一样的。
如何让领导信任你能Hold住Node.js
1. 树立专业形象
树立专业形象主要为了达到跟领导建立信任感,让领导知道你是能把一件事情做好的人,即首先让领导信任你这个人或者团队。这个需要在平时多跟领导交流,表现出个人素养。我认为主要分为两个方面:
责任心强、解决问题能力强、遇事能钻研。如果之前打过硬仗将会是很好的佐证材料。技术能力优秀。平时除了将本身的工作做好之外,应该在网络、安全、程式码架构等后端方面有相关表现,平时多逛论坛、内部/朋友圈分享、写技术文章会是很好的证明。2. 他山之石,可以攻玉
以开放和包容的态度对待技术。 在后台的大牛面前,Node.js能做的内容还是小打小闹,他们在各方面都有成熟的方案。例如在全链路监控、系统性能度量、算法、数据库等等方面,因此多跟后台人员讨教,兼听则明。
3. 以资料,文件说话
Node.js的效能如何,能否顶得住现有压力,不是靠我们几句话就能描述清楚的,一份压测报告才是最好的证明。如果是改造原有系统,有个直观的资料资料比较会更好,我们使用Node.js改造JSP站点的时候,渲染同个页面压测出来的资料是有10倍+效能的提升的。
好的技术设计文件利于大家了解你的架构和后续做扩充套件。因此一份长期维护的文件也是很重要的。如何写一份好的文件,推荐大家看这边文章What nobody tells you about documentation
其他
以下是本人关于Node.js未来发展的一些观点,仅供参考:
service mesh的规模化使用之后,使用任何语言都能开发微服务,而不需要关心如何搭建微服务体系本身。对于使用Node.js是一种利好;现有运维体系已经相当成熟,借助k8s+Prometheus即可做好node.js执行时监控,线上监控趋向简单;天下大势合久必分,Node.js站稳之后,应该会成为独立岗位,专注于服务端。