最新版本号[免费下载]

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

作者:本站编辑 发布时间:2015-11-24 来源:本站原创 点击数:

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

在说之前,需要统一 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 在性能上没有特别明显优势,需要持续在生产环境中观察。

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

 


本文责任编辑: 加入会员收藏夹 点此参与评论>>
复制本网址-发给QQ/微信上的朋友
AI智能听书
选取音色