先后端分离

一丶为何要实现先后端分离:先后端分离有什么好处前端

按照项目开发来讲:web

1.实现先后端分离可使 项目更快的研发完成,后端

2.加快了项目的时间api

传统开发形式:浏览器

 

先后端分离开发:性能优化

在开发阶段,当有新的需求时,先后端工程师约定好接口数据格式,就能够并行进行开发测试了,前端工程师没必要等待后端的接口开发好了才开始工做,能够利用mock假数据等方式模拟接口返回数据(固然还有其余方式),先后端都开发好以后双方再进行联调,测试,发现问题及时修复,从而保证项目的正常完成。服务器

1.前端代码再也不耦合后端代码,完全解放前端前端工程师

2.先后端能够按照约定好的数据格式同时进行开发,极大地提高了开发效率架构

3.发现问题以后也能够快速定位到问题。若是是接口的问题,则后端工程师来修复,若是是页面问题,则由前端工程师来修复,也下降了维护成本负载均衡

4.能够应对复杂多变的需求,一套API能够用于不一样的应用

 

 

先后端分离能够从四个方面理解:

1.交互形式

2.代码组织方式

3,开发模式

4.数据接口规范流程

在先后端分离架构中,后端只是负责按照约定的数据格式向前段提供可调用的api服务便可,先后端之间经过http请求进行交互,前段获取数据以后,进行页面的组装和渲染,最终返回给浏览器.

在传统架构模式中,先后端代码存放于同一个代码库中,甚至是同一工程目录下。页面中还夹杂着后端代码。先后端工程师进行开发时,都必须把整个项目导入到开发工具中。

而先后端分离模式在代码组织形式上有如下两种:

1.半分离

先后端共用一个代码库,可是代码分别存放在两个工程中。后端不关心或不多 关心前端元素的输出状况,前端不能独立进行开发和测试,项目中缺少先后端 交互的测试用例。

2.分离

先后端代码库分离,前端代码中有能够进行Mock测试(经过构造虚拟测试对 象以简化测试环境的方法)的伪后端,能支持前端的独立开发和测试。然后端 代码中除了功能实现外,还有着详细的测试用例,以保证API的可用性,下降 集成风险。

分离以后的4大优势:

 

  • 为优质产品打造精益团队
    经过将开发团队先后端分离化,让先后端工程师只须要专一于前端或后端的开发工做,是的先后端工程师实现自治,培养其独特的技术特性,而后构建出一个全栈式的精益开发团队。

  • 提高开发效率
    先后端分离之后,能够实现先后端代码的解耦,只要先后端沟通约定好应用所需接口以及接口参数,即可以开始并行开发,无需等待对方的开发工做结束。与此同时,即便需求发生变动,只要接口与数据格式不变,后端开发人员就不须要修改代码,只要前端进行变更便可。如此一来整个应用的开发效率必然会有质的提高。

  • 完美应对复杂多变的前端需求
    若是开发团队能完成先后端分离的转型,打造优秀的先后端团队,开发独立化,让开发人员作到专一专精,开发能力必然会有所提高,可以完美应对各类复杂多变的前端需求。

  • 加强代码可维护性
    先后端分离后,应用的代码再也不是先后端混合,只有在运行期才会有调用依赖关系。

 

应用代码将会变得整洁清晰,不管是代码阅读仍是代码维护都会比之前轻松。

须要进行先后端分离的场景

任何一项技术以及架构都不是适用于任何场景,先后端分离一样也是如此。虽然先后端分离架构能带来许多的好处,但前提是创建在开发团队合适的基础上的。

而咱们百度网盘就属于那种:

  1. 页面布局复杂,使用了主题和样式。

  2. 须要有较高的页面渲染效果

  3. 前端页面中包含复杂业务逻辑

  4. 页面须要渲染的数据量较大

像这种重前端的应用咱们综合考虑了各类状况,最终决定采用先后端分离架构。

 

部署方案

先后端分离以后,应用在部署时也须要进行先后端分离。在进行先后端分离方案选择时,须要结合项目的实际状况和用户来考虑

分离以前的架构

先后端分离以前,网盘的后端架构是Nginx服务和后端的PHP服务以及前端的静态资源都是部署在同一台服务器上。当浏览器发起访问请求时,如何请求的是静态资源,Nginx直接把静态资源返回给服务器;若是请求的是页面或后端服务,则经Nginx将请求转发到后端的PHP服务器,完成响应后经Nginx返回到浏览器。

 

这个方案比较简单,易于实现,并且能到达先后端解耦的目的。并且不少公司目前都是基于这种架构或者必定的变形来实现的web应用。

可是对于页面量比较大,须要有良好SEO的应用来讲,此方案缺点也较为明显。由于 Nginx只是向浏览器返回页面静态资源,而国内的搜索引擎爬虫只会抓取静态数据, 不会解析页面中的js,这使得应用得不到良好的搜索引擎支持。同时由于Nginx不会进行页面的组装渲染,须要把静态页面返回到浏览器,而后完成渲染工做,这加剧了浏览器的渲染负担。

另外,因为这种架构使得前端工程师的工做范围只局限在了浏览器一侧,致使在进行一些特殊的性能优化时,前端工程师没法独立完成,还须要后端开发人员的配合,这也必定程度上影响了双方的进度。

分离以后的架构

 

先后端分离以后,咱们在原先的架构只上再单独增长了一个Node Server做为中间层,将前端资源部署到Node Server中。Node Server还实现了一层数据代理服务,负责与提供数据的后端服务进行通讯。

而且还在这个基础上增长并使用了前端机(前端机是对全部的请求进行预处理和负载均衡,而后再转发给后端机。)的Nginx服务,浏览器发起的请求通过前端机的Nginx进行分发,URL请求统一分发到Node Server,在Node Server中根据请求类型从后端服务器上经过RPC服务请求页面的模板数据,而后进行页面的组装和渲染;API请求则直接转发到后端服务器,完成响应。

相关文章
相关标签/搜索