如何看待用 NodeJS 进行前后端分离?

Posted 跨界码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何看待用 NodeJS 进行前后端分离?相关的知识,希望对你有一定的参考价值。


这是最近在知乎比较火的一个问题,也比较典型,我将这个贴子系统的做了一个总结并加入了自己的一些经验,希望对推动大前端的同学有所帮助。


在说之前,需要统一 Web 应用以及前后端分离的概念。


NodeJS 做 Web 应用,是指将 NodeJS 取代传统的后端业务开发语言的工作。


包括 router, controller 以及 view 这部分的功能将由 NodeJS 取代。


而所谓前后端分离,指的是除了 html、CSS、javascript 的工作之外,上面提到的工作职责也将由前端来承担,同时「大前端」也可理解为是一个意思。


{基本共识}


通篇扫完知乎所有的回答,大家都比较同意:


- NodeJS 作为前端开发未来的一种趋势,这点绝大多数人赞同。


- 在前端「扩大工作范围」与大前端「在应用开发有更多可能」这两点上也基本都有共识。


这两点就不啰嗦了,重点说一些问题。


{焦点问题}


NodeJS 进行前后端分离面临的问题也比较多,我们把问题聚焦到两三个,我总结了一下,基本集中在:


- NodeJS 说服后端没有切中痛点,缺乏论据。


它对前端而言利益明显,但对后端需要将原来的语言切换成 NodeJS,

只有前后端模板切换便利 和 异步 I/O 的性能优势,要说服理性的工程师还缺乏有效事实与足够的论据。


需要更量化的数据与成功的经验才是「逻辑」。


倘若没有后端的支持,前端在既有的架构下要推动大前端的发展,说易行难。


哪些公司用了?paypal ?或百度?

这里需要提醒的是——切勿盲目跟风,需要了解和分析表象背后,他们为什么要切 NodeJS。


- NodeJS 是某些工程师升级晋升的工具。


它使前端在职称上能有更远的路,这话题太老生常谈了。不同的心态、状态、角度都有不同的看法。


我的观点是少数人或许某一时期可以以自己小聪明博上位,大多数人想这么做是不可靠的。


否则企业的技术观由这样的人上位,这样的畸形的人上位会把企业搞垮。


所以,从企业可长期发展去看,我会倾向从正面的角度 — NodeJS 是解决了现有问题才能晋升,所以晋升这只是「动力」,不是「目的」。


为了发展而晋升,并没有什么问题。


- 前端工作量的变化。


毫无疑问,NodeJS 的 Web 应用将增大前端工作量,当然也会使部分做后端 controller 的同学丢掉现有工作。


所以,从这个角度来看,如果后端研发的人员会有富余(当然也没有人会傻到说自己人会富余)的情况下,推动是一个非常(Bi) 综 (Jiao) 合(Nan) 的工作。


往往在项目早期前端给后端洗脑会更容易。


就我了解到的信息来看几个公司的情况都不一样:


淘宝最早不碰后端模板导致在研发上有些许被动,绝大多数情况下后端为主主导项目,前端只写 HTML,CSS,还有 JavaScript。拼模板是由后端工程师来做,以至于上线以后改个字都要求后端工程师去改模板。


这样的历史问题,使得他们对前后端开发的改造非常迫切,而 NodeJS 正红,是不错的选择。


百度就做得比较好,主要是因为前端在某一时期内的膨胀,使得前端人力短时富余,可把模板接手开发。并且,前端能力也能跟上这样的节奏。现在已经很多产品线的前端工作已经包括了 php 的 controller。


更有些产品线一些基本的建库操作这些都由前端来做,后端只写核心的 Module 与服务;想象一个场景,一个运营专题(非静态页)前端后端部署都是一个人。


而在中小型创业公司,考虑到招聘与用人成本,需要一个万金油从前到后一起开发了,而前端招聘的成本相对小,所以选择 NodeJS 也是自然而然的过程。


- 至于其他的细节与过渡。


时间问题,灰度上线,质量控制,运维监控等等,不同的公司有着截然不同的做法与重点。


这里不展开。想听故事的同学,以后我们可单独来八卦其他几个大公司的前端现状与发展。


{前置条件}


上面也提到了 NodeJS 在创业公司的应用范围比我们想象的要多,大公司会有一定滞后性。


如果大公司要应用,我个人觉得需要有一个前置条件,无论是阿里,百度或是腾迅。


都需要有「平台化」作为前提。


平台化接口化的简单的理解是指后端的服务以类似 WebServices 这样的存在,可透明使用数据。


有了这样的前提,切换成本才可能大大降低,否则我们想象一下,假设之前的开发用 PHP,很多数据是都是通过 require 来引用:


require_once('list.php');

$lists = list_model.getAll();


NodeJS 不能用怎么办?要解决基本用这样的方案。


- 重新写一套调用数据的服务

- Adapter 适配现有的业务

- 用工具把 PHP 转 NodeJS


如果原来这些数据都是 HTTP 的服务存在,调用组合更为灵活,更重要的是省去改造成本,真可让人满血复活。


{经验教训}


记录之前我了解的经验教训:


- 重视前端的「工程师」方面工作。

由于前几年前端工程师被洗脑成为 HTML,CSS,JavaScript 语言上码农,对工程概念严重弱化——只知道把界面和交互做出来,忘了自己是工程师。


在 09 年大前端,我所在的团队就以大前端的方式已经做过中大型项目,若是一个合格的「工程师」来说,这大前端技术上不是问题。


但,招聘要求若提高,招人和培养成本就高了。解决方法是:


- 把这部分给后端做

- 前端再分工

- 把要求提高


- 找好试点。

在成熟系统上要试 NodeJS 请找好切入点。一般找的是业务关系不大,但平台化接口化做得比较好的业务,如移动 WebApp。


- 持续跟进 NodeJS 的问题。

目前用 NodeJS 做的 Web 应用从实际性能看与传统 PHP+HHVM 在性能上没有特别明显优势,需要持续在生产环境中观察。


- 运维经验很重要。

在机器的运维上前端之前没有经验,前期前端的工作不仅包括开发,还要涉及全面运维和部署以及监控,否则线上事故说不清楚。也就是说前端对所有事敢负责。


- 做改造不造势。

阿里同学这般高调,感觉这件事可能不太不可控,想象一下,

整个公司都知道你要起一套新的玩法,正面负面声音都传递过来,想静心做事压力也很大啊,做不好还雷声大雨点小。


有了成功的经验再来宣传也不迟。


我也没有说现在的 NodeJS 已经在线了是不是?lol


{总结}


架构调整需要有靠谱的、同心协力的前端工程师以外,还取决于该公司或改造部门负责人的「技术观」。


对技术的理解与发展趋势的判断决定了这个部门后续架构的发展。


有的时候「技术观」不是个人,而是整体团队整体给人的感觉。


最后,希望你是在一个技术开放的团队,而不是所有的事都一言堂;而技术的改造,不会是短期过程,希望各位能用毅力坚持下去,实现技术梦。


---



以上是关于如何看待用 NodeJS 进行前后端分离?的主要内容,如果未能解决你的问题,请参考以下文章

你是如何看待前后端分离的?

前后端分离框架

前后端分离用nodejs做seo

如何前后端分离?

前后端分离的思考与实践

nodeJS(前后端分离、优势、不足