怎么做前后端分离,其实第一节中已经有了答案:
前端:负责 VIew 和 Controller 层
后端: 负责 Model 层,业务处理 / 数据等
试想一下,如果前端掌握了 Controller, 我们可以做 url design, 我们可以根据场景决定在服务端同步渲染,还是根据 View 层数据输出 json 数据,我们还可以根据表现层需求很容易的做 Bigpipe,Comet,Socket 等等, 完全是需求决定使用方式.
3.1 基于 NodeJS"全栈" 式开发
如果想实现上图的分层.就必然需要一种 web 服务帮助我们实现以前后端做的事情.于是就有了标题提到的 "基于 NodeJS 的全栈式开发"
这张图看起来简单而且很好理解,但没尝试过,会有很多疑问.
SPA 模式中,后端已供了所需的数据接口,view 前端已经可以控制,为什么要多加 NodeJS 这一层?
多加一层,性能怎么样?
多加一层,前端的工作量是不是增加了?
多加一层就多一层风险,怎么破?
NodeJS 什么都能做,为什么还要 JAVA?
这些问题要说清楚不容易,下面说下我的认识过程.
3.2 为什么要增加一层 NodeJS?
现阶段我们主要以后端 MVC 的模式进行开发,这种模式严重阻碍了前端开发效率,也让后端不能专注于业务开发.
解决方案是让前端能控制 Controller 层,但是如果在现有的技术体系下很难做到.因为不可能让所有前端妹子学 java, 安装后端的开发环境,写 VM,NodeJS 就能很好的解决这个问题,
我们无需学习一门新的语言.就能做到以前开发帮助我们做的事情.一切都显的那么自然.'
3.3 性能问题
分层就涉及到了每层之间的通信.肯定会有一定的性能损耗.但是合理的分层能让职责清晰,也方便协作.会大大提高开发效率.分层带来的损失,一定能在其他方面的收益弥补回来.另外,一旦决定分层,我们可以通过优化通讯方式,通讯协议,尽可能把损耗降到最低.
举个例子:
淘宝宝贝详情页静态化之后,还是有不少需要实时获取的信息,比如物流,促销等等,因为这些信息在不同业务系统中,所以需要前端发送 5,6 个异步请求来回填这些内容.
有了 NodeJS 之后,前端可以在 NodeJS 中去代理这 5 个异步请求,还能很容易的做 Bigpipe, 这块的优化能让整个渲染效率提升很多.
可能在 PC 上你觉得发 5,6 个异步请求也没什么,但是在无线端,在客户手机上建立一个 HTTP 请求开销很大,有了这个优化,性能一下提升好几倍.
淘宝详情基于 NodeJS 的优化我们正在进行中,上线之后我会分享一下优化的过程.
3.4 前端的工作量是否增加了?
相对于只切页面 / 做 demo,肯定是增加了一点,但是当前模式下有联调,沟通环节,这个过程非常花时间,也容易出 bug,还很难维护.
所以,虽然工作量会增加一点,但是总体开发效率会提升很多.
另外,测试成本可以节省很多,以前开发的接口都针对表现层.很难写测试例.如果做了前后端分离,甚至测试都可以分开.
'
来源: http://www.bubuko.com/infodetail-2460427.html