美文网首页
前后端分离

前后端分离

作者: 颖小李 | 来源:发表于2020-04-28 19:31 被阅读0次

参考资料:前后端分离架构概述(https://blog.csdn.net/fuzhongmin05/article/details/81591072)

一、背景

    前后端分离的核心思想是前端HTML页面通过Ajax调用后端的RESTFUL API 接口并使用JSON数据进行交互。

    Web服务器:一般指像Ngnix,Apache这类服务器,只能解析静态资源。

    应用服务器:一般指向Tomcat,Jetty,Resin这类既可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好。

    一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。

二、未分离时代(各种耦合)

    这个时期的开发方式有两种:

   方式一: 前后端并行(前端根据设计图做成html页面、后端开发服务接口),然后后端将html改成jsp,并和服务接口集成,最后测试上线

   方式二:后端先开发服务接口,前端根据后端服务直接写模板,然后测试上线。

    方式二已经逐渐被淘汰,原因有二:第一,前端严重依赖后端,后端没有完成,前端完全没法干活。第二,由于趋势问题,会JSP,懂velocity,freemarker等模板引擎的前端越来越少。

    方式一至今还有一些小公司在用,方式一和方式二具有的共同缺点有三个:第一,前端无法单独调试,开发效率低。第二,前端会不可避免的遇到后台代码。第三,JSP本身所导致的一些问题。比如,JSP第一次运行会比较缓慢;在JSP有很多内容时,页面相应会很慢。

三、半分离时代

    前端负责开发页面,通过接口Ajax获取数据,采用DOM操作对页面进行数据绑定,最终是由前端把页面渲染出来。

    为什么说是半分离的?因为不是所有页面都是单页面应用,在多页面应用的情况下,前端因为没有掌握controller层,前端需要跟后端讨论,我们这个页面是要同步输出呢,还是异步渲染?而且这个时期通常也是一个工程师搞定前后端的所有工作,所以只能算半分离。

    这种方式的优点很明显。前端不会嵌入任何后端代码,能够模拟JSON数据来渲染页面。发现bug也能迅速定位是谁的问题。

    也还存在明显的弊端。第一,JS存在大量冗余,业务复杂时页面渲染部分的代码会非常复杂。第二,json返回的数据量比较大时,页面渲染会很慢,页面会卡顿。第三,搜索引擎的爬虫无法识别异步数据,SEO非常不方便。第四,资源消耗严重,业务复杂时一个页面要发起多次http请求才能将页面渲染完毕,PC端可能还好,但是移动端会非常消耗资源。

四、分离时代

    大家一致认同的前后端分离的例子就是SPA(single-page application),所有用到的数据都是后端通过异步接口提供,前端只管展现。从某种意义上说,SPA确实做到了前后端分离,但是这种方式存在两个问题:第一,web服务中,SPA类占的比例很少。很多场景还有同步/同步+异步混合的模式,SPA不能作为一种通用的解决方案。第二,现阶段的SPA开发模式,接口通常是按照展现逻辑来提供的,而且为了提高效率我们也需要后端帮我们处理一些展现逻辑,这就意味着后端还是涉及了view层的工作,不是真正的前后端分离。

    SPA式的前后端分离,从物理层做区分,认为只要是客户端的就是前端的,服务器就是后端的。这种分法已经无法满足前后端分离的需要,我们认为从指责上划分才能满足目前的使用场景,前端负责view和controller层,后端只负责model层,业务处理与数据持久化等。

    在前后端彻底分离这一时期,前端的范围被扩展,controller层也被认为属于前端的一部分。在这一时期:前端负责view和controller层,后端只负责model层,业务/数据处理等。前端的controller层如何实现呢?node.js。node适合运用在高并发、I/O密集、少量业务逻辑的场景。

    可以就把nodeJS当成跟前端交互的api。

    浏览器(webview)不再直接请求JSP的API,而是:(1)浏览器请求服务器端的NodeJS. (2)NodeJS再发起HTTP去请求JSP。(3)JSP依然原样API输出JSON给NodeJS。(4)NodeJS收到JSON后再渲染出HTML页面。(5)NodeJS直接将HTML页面flush到浏览器。这样浏览器得到的就是普通的HTML页面,而不用再发Ajax去请求服务器了。

    

相关文章

  • 2019-01-11前后端分离

    什么是前后端分离? 为什么前后端分离? 前后端分离的优势? 未分离时期 MVC: 早期JSP+SERVLET中的结...

  • 前后端分离

    什么是前后端分离 前后端分离中前端负责页面路由控制,页面展示,后端处理数据,通过json进行传输。前后端分离并非仅...

  • vivo 商城前端架构升级—前后端分离篇

    本文主要以 vivo 商城项目的前后端分离经验,总结前后端分离思路,整理前后端分离方案,以及分离过程中遇到的问题及...

  • Spring Boot+Vue概述(一)

    前后端分离 前后端分离就是将⼀个应⽤的前端代码和后端代码分开写,为什么要这样做?如果不使⽤前后端分离的⽅式,会有哪...

  • 前后端分离

    方案一 简易前后端分离 前后端分离原则,简单来讲就是前端和后端的代码分离,也就是技术上做分离,我们推荐的模式是最好...

  • 六大接口管理平台,总有一款适合你的!

    前后端分离绕不开的接口测试 先聊一聊前端和后端分离的优点。前后端分离优点如下: 真正的实现前后端解耦,前端服务器使...

  • 使用nginx解决跨域问题

    1.跨域解释 1.1 怎么知道我遇到了跨域问题 如果项目没做前后端分离,是不会有跨域问题的。前后端分离的项目中,前...

  • 前后端分离架构与小程序的环境切换

    前后端分离架构 随着前端应用的越来越复杂,前后端分离架构成为了主流。前后端分离之后,前端并不依赖后端的模板和路由,...

  • 基于Flask开发的前后端分离租房项目(一)

    一、明确前后端分离和前后端不分离的概念: 我的理解:前后端不分离的概念是后端要控制前端的数据显示和模板渲染(dja...

  • 前后端分离开发模式下的接口规范

    1 背景 此处我不解释为什么要前后端分离、前后端分离的优缺点等问题,采用前后端分离开发模式就变成了这样, 前后端分...

网友评论

      本文标题:前后端分离

      本文链接:https://www.haomeiwen.com/subject/pjduwhtx.html