这是最近在知乎比较火的一个问题,也比较典型,我将这个贴子系统的做了一个总结并加入了自己的一些经验,希望对推动大前端的同学有所帮助。
在说之前,需要统一 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 在性能上没有特别明显优势,需要持续在生产环境中观察。
- 运维经验很重要。
在机器的运维上前端之前没有经验,前期前端的工作不仅包括开发,还要涉及全面运维和部署以及监控,否则线上事故说不清楚。也就是说前端对所有事敢负责。