参考:https://www.kancloud.cn/kancloud/midway/48192前端
前言node
随着不一样终端的兴起,对开发人员要求愈来愈高,纯浏览器端的响应式已经不能知足需求,咱们须要为不一样版本的的终端开发定制版的网页,传统的开发方式先后端耦合性太大,不能快速的基于前一版本开发其余版本的页面。为了提升开发效率,先后端分离成为了最好的选择方式,前端后端分别负责不一样的方向,前端负责展示和交互,后端负责业务和数据接口,这样能够减小先后端的耦合性,前端后台经过api来交互,这样可使前端用同一套数据接口开发出不一样版本的系统。后端
1、先后端分离概念api
先后端分离是从职责上进行划分,再也不是单纯的物理层划分浏览器
前端:负责view和controller服务器
后端:负责model层,业务处理和数据处理mvc
eg:SPA(single-page application)即为一个先后端分离的例子,前端和后台交互仅经过AJAX的方式交互。可是spa是经过物理层作的区分(认为只要是客户端就是前端,服务器端就是后台)app
SPA存在问题前后端分离
1.SPA用的场景较少,不少场景仍是用同步异步混合的方式。异步
2.现阶段的SPA开发模式,接口由后台提供,可是有时为了提升效率,后端帮前端处理了展示逻辑,意味着后台处理了view层。
3.SPA方式不利于SEO(搜索引擎搜索)
2、为何要有先后端分离
一、现有开发模式适用场景
1)之后台为主的mvc,作同步展示很方便,可是同步异步相结合的就很麻烦
2)Ajax为主的SPA型,适合app类型场景开发,可是对SEO很不友好。对于稍微简单一些的系统,用这种开发模式过于笨重
二、先后端职责不清
目前先后端职责不是很清楚,没有约束,每一层均可能出现不属于本层的东西,不便于维护。
三、开发效率问题
先后端揉杂在一块儿,对前端后台来讲都是一个很大的负担,前端不能关注到view,要了解不少后台的语言特性,在前端代码中穿插后台代码,后端无法摆脱对展示的强关注,从而专心于逻辑层开发。
四、对前端发挥局限
由于与后台强耦合性,前端只能在很小的空间中发挥做用,无法尝试更新的技术。
3、如何作先后端分离
在后台与前端view之间新加一层node来作代理。
一、为何要加node层
1)MVC严重阻碍了前端开发效率,也是后台没法集中于业务,解决方案是让前端来控制controller
2)前端来写controller,若是让前端再学一门后台语言代价太大,node是用js开发
3)前端来代理能够优化请求,合并请求,全部与页面交互的接口本身控制,可以提升前端的开发效率