文章来自简书:https://www.jianshu.com/p/f1287e1aee50前端
在网站开发过程当中,对于先后端的分界线彷佛一直是众说纷纭。从一开始彻底没有先后端的概念,到后来的纠缠不清。node
在个人脑海中一提到前端和后端,基本上第一个出现的区别点就是:后端是跟数据库跟服务器打交道的,前端是跟浏览器打交道的。彷佛没有什么问题,你们都这么认为的。固然这没有什么错,咱们一直以来都认为仅仅是以浏览器做分界,把这两部分的代码分离出来。可是先后端分离的初衷是为了分离先后端开发人员的职责,同时解决开发模式的问题。但彷佛他们的职责在之前甚至于如今都并不明确,虽然前端是跟浏览器打交道,可是最终浏览器拿到的页面是服务器经过模板生成的一个临时静态页面而已。因此,实际上后端也掺和进来了,由于他要处理模板。固然,通常传统上的开发协做模式有两种:数据库
一种是前端先写一个静态页面,写好后,让后端去套模板。静态页面能够本地开发,也无需考虑业务逻辑只须要实现View便可。不足是还须要后端套模板,这些前端代码后端须要浏览一遍,以避免出错。后端
另外一种协做模式是,前端直接去写模板,这样作的问题在于,前端编写过程当中很依赖与后端环境,若是当后端没写完的状况下,前端几乎无法干活。api
显然这两种方式彷佛都有不少问题,但至少这仍是目前为止大部分公司所采用的模式。他们从物理层来区分先后端的开发,同时淡化了前端在逻辑上的色彩。因为前端所作的事情就是来实现一个页面的静态版本,因此,大多数公司又给前端工程师们找了点活干。你去看如今公司在招聘的时候前端工程师的要求,除了对页面的基本制做技能外还有额外的设计职责。浏览器
到这里本来咱们觉得已经将先后端分离开来了,可是在模版这个尴尬的问题上,先后端的工程师们绝对吃过很多苦头,由于在总体网站架构上,这并非先后端的分离。服务器
淘宝的前端团队真的很厉害,中途岛(Midway Framework)的架构在14年4月份就已经提出来了。restful
简单的说,中途岛架构是基于NodeJs的,由于Js是一门先后端通吃的语言,它能够做为一个桥梁搭建在原始的先后端模式中。具体的中途岛思想能够参考淘宝前端团队博客里发的博文:先后端分离的思考与实践想象一下这个场景多么美好:前端来决定某个模板是服务端渲染仍是客户端渲染,当首屏的时候,就在nodejs里面生成HTML,不是首屏的时候,就AJAX过来在浏览器端渲染展现。前端工程师
加入NodeJs还有不少好处,好比NodeJs的高并发特性,请求合并等。同时使用nodeJs作桥梁,前端能够本身决定获取什么格式的数据。架构
如今有一个在前端领域很火的名词SPA(Single Page Application)也就是所谓的单页应用,在和用户交互的时候当用户点击某个物件或者按键的时候不会跳转到其余的页面,会像app同样在当前页面进行跳转,最典型的框架是:Angular、Backbone等。
现阶段我在公司开发的移动商城就是采用Angular架构的一个SPA,切换页面或者场景的时候并不会跳转页面,只是去改变连接上的锚点,这个锚点由ui-route监听到,从而就由前端实现了对URL的掌控。SPA无需任何模板来控制输出,它的展示彻底靠JavaScript控制,数据是SpringMVC经过restful的api接口提供的,因此SPA所采用的先后端的分离,已经基本分的很清楚了,后台只管数据输出和业务逻辑处理,前端负责交互逻辑和界面展现。
这样就须要先后端在接口的方面约定好,以免没必要要的麻烦。Blueprint是一个用来编写Api文档的工具包,对restful API几乎是完美兼容。