1.什么是先后端分离前端
传统的SPA模式:全部用到的展示数据都是后端经过异步接口(AJAX/JSONP)的方式提供的,前端只管展示。java
从某种意义上来讲,SPA确实作到了先后端分离,但这种方式存在两个问题:web
- WEB服务中,SPA类占的比例不多。不少场景下还有同步/同步+异步混合的模式,SPA不能做为一种通用的解决方案。
- 现阶段的SPA开发模式,接口一般是按照展示逻辑来提供的,并且为了提升效率咱们也须要后端帮咱们处理一些展示逻辑,这就意味着后端仍是涉足了view层的工做,不是真正的先后端分离。
现阶段:从职责上划分才能知足目前咱们的使用场景:express
- 前端:负责View和Controller层
- 后端:只负责Model层,业务处理/数据等。
2.怎么作先后端分离json
- 前端:负责View和Controller层
- 后端:只负责Model层,业务处理/数据等。

试想一下,若是前端掌握了Controller,咱们能够作url design,咱们能够根据场景决定在服务端同步渲染,仍是根据view层数据输出json数据,咱们还能够根据表现层需求很容易的作bigpipe,comet,socket等等,彻底是需求决定使用方式。后端
3.一、基于NodeJS全栈式开发
须要一种web服务帮咱们实现之前后端作的事情浏览器

这张图看起来简单并且很好理解,但没尝试过,会有不少疑问。架构
- SPA模式中,后端已供了所需的数据接口,view前端已经能够控制,为何要多加NodeJS这一层?
- 多加一层,性能怎么样
- 多加一层,前端的工做量是否是增长了?
- 多加一层就多一层风险,怎么破?
- NodeJS什么都能作,为何还要JAVA
3.二、为何要增长一层NodeJS?
现阶段咱们主要之后端MVC的模式进行开发,这种模式严重阻碍了前端开发效率,也让后端不能专一于业务开发。
解决方案是让前端能控制Controller层,可是若是在现有技术体系下很难作到,由于不可能让全部前端都学java,安装后端的开发环境,写VM。
NodeJS就能很好的解决这个问题,咱们无需学习一门新的语言,就能作到之前开发帮咱们作的事情,一切都显得那么天然。框架
3.三、性能问题
分层就涉及每层之间的通信,确定会有必定的性能损耗。可是合理的分层能让职责清晰、也方便协做,会大大提升开发效率。分层带来的损失,必定能在其余方面的收益弥补回来。
另外,一旦决定分层,咱们能够经过优化通信方式、通信协议,尽量把损耗降到最低。前后端分离
4、基于Node的先后端分离

上图是对基于Node的先后端分离分层的理解,以及Node的职责范围。简单解释下:
- 最上端是服务端,就是咱们常说的后端。后端对于咱们来讲,就是一个接口的集合,服务端提供各类各样的接口供咱们使用。由于有Node层,也不用局限是什么形式的服务。对于后端开发来讲,他们只用关心业务代码的接口实现。
- 服务端下面是Node应用。
- Node应用中有一层Model Proxy与服务端进行通信。这一层主要目前是抹平咱们对不一样接口的调用方式,封装一些view层须要的Model。
- Node层还能轻松实现原来vmcommon,tms等须要
- Node层要使用什么框架由开发者本身决定。不过推荐使用express+xTemplate的组合,xTemplate能作到先后端公用。
- 怎么用Node你们本身决定,可是使人兴奋的是,咱们终于可使用Node轻松实现咱们想要的输出方式:JSON/JSONP/RESTful/HTML/BigPipe/Comet/Socket/同步、异步,想怎么整就怎么整,彻底根据你的场景决定。
- 浏览器层在咱们这个架构中没有变化,也不但愿由于引入Node改变你之前在浏览器中开发的认知。
- 引入Node,只是把本该就前端控制的部分交由前端掌控。