大数跨境
0
0

「正方说」软件开发 | 浅谈前后端分离技术(一)

「正方说」软件开发 | 浅谈前后端分离技术(一) 正方股份
2021-12-28
2
导读:作者:高凡前端工程师

作者:高凡

前端工程师

· 背景


前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。

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

Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;

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

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

以前的Java Web项目大多数都是Java程序员又当爹又当妈,又搞前端,又搞后端。随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会,那么他毕竟什么都不精。大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,前后端需要分离。

· 未分离时代

(各种耦合)


早期主要使用MVC框架,Jsp+Servlet的结构图如下:

大致就是所有的请求都被发送给作为控制器的Servlet,它接受请求,并根据请求信息将它们分发给适当的JSP来响应。同时,Servlet还根据JSP的需求生成JavaBeans的实例并输出给JSP环境。JSP可以通过直接调用方法或使用UseBean的自定义标签得到JavaBeans中的数据。需要说明的是,这个View还可以采用 Velocity、Freemaker 等模板引擎。使用了这些模板引擎,可以使得开发过程中的人员分工更加明确,还能提高开发效率。

那么,在这个时期,开发方式有如下两种:

方式一

方式二


这种方式已经逐渐淘汰。主要原因有两点:

1)前端在开发过程中严重依赖后端,在后端没有完成的情况下,前端根本无法干活;

2)由于趋势问题,会JSP,懂velocity,freemarker等模板引擎的前端越来越少;


因此,方式二逐渐不被采用。然而,不得不说一点,方式一,其实很多小型传统软件公司至今还在使用。那么,方式一和方式二具有哪些共同的缺点呢? 


1、前端无法单独调试,开发效率低;

2、 前端不可避免会遇到后台代码,例如:

<%request.setCharacterEncoding("utf-8")Stringname=request.getParameter("username"); out.print(name); %>

这种方式耦合性太强。那么,就算你用了freemarker等模板引擎,不能写Java代码。那前端也不可避免的要去重新学习该模板引擎的模板语法,无谓增加了前端的学习成本。正如我们后端开发不想写前端一样,你想想如果你的后台代码里嵌入前端代码,你是什么感受?因此,这种方式十分不妥。

3、JSP本身所导致的一些其他问题。比如,JSP第一次运行的时候比较缓慢,因为里头包含一个将JSP翻译为Servlet的步骤。再比如因为同步加载的原因,在JSP中有很多内容的情况下,页面响应会很慢。

· 半分离时代


前后端半分离,前端负责开发页面,通过接口(Ajax)获取数据,采用Dom操作对页面进行数据绑定,最终是由前端把页面渲染出来。这也就是Ajax与SPA应用(单页应用)结合的方式,其结构图如下:

步骤如下:

(1)浏览器请求,CDN返回HTML页面;

(2)HTML中的JS代码以Ajax方式请求后台的Restful接口;

(3)接口返回Json数据,页面解析Json数据,通过Dom操作渲染页面。


后端提供的都是以JSON为数据格式的API接口供Native端使用,同样提供给WEB的也是JSON格式的API接口。


那么意味着WEB工作流程是:

1、打开web,加载基本资源,如CSS,JS等;

2、发起一个Ajax请求再到服务端请求数据,同时展示loading;

3、得到JSON格式的数据后再根据逻辑选择模板渲染出DOM字符串;

4、将DOM字符串插入页面中web view渲染出DOM结构。

这些步骤都由用户所使用的设备中逐步执行,也就是说用户的设备性能与APP的运行速度联系的更紧换句话说就是如果用户的设备很低端,那么APP打开页面的速度会越慢。

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

首先,这种方式的优点是很明显的。前端不会嵌入任何后台代码,前端专注于HTML、CSS、JS的开发,不依赖于后端。自己还能够模拟Json数据来渲染页面。发现Bug,也能迅速定位出是谁的问题。

然而,在这种架构下,还是存在明显的弊端的。最明显的有如下几点:

1)JS存在大量冗余,在业务复杂的情况下,页面的渲染部分的代码,非常复杂;

2)在Json返回的数据量比较大的情况下,渲染的十分缓慢,会出现页面卡顿的情况;

3)SEO( Search Engine Optimization,即搜索引擎优化)非常不方便,由于搜索引擎的爬虫无法爬下JS异步渲染的数据,导致这样的页面,SEO会存在一定的问题;

4)资源消耗严重,在业务复杂的情况下,一个页面可能要发起多次HTTP请求才能将页面渲染完毕。可能有人不服,觉得PC端建立多次HTTP请求也没啥。那你考虑过移动端么,知道移动端建立一次HTTP请求需要消耗多少资源么?

正是因为如上缺点,我们才亟需真正的前后端分离架构

软件开发 | 浅谈前后端分离技术(一)

作者:高凡

前端工程师




- END -




正方股份


大庆正方软件科技股份有限公司(简称正方股份)创立于2002年,是高新技术企业和黑龙江省双软认证企业,是国内将大数据人工智能技术研发与国内油田主营业务深度融合的信息技术服务公司,从事软件研发、大数据、人工智能、物联网、云应用、技术服务、培训等全序列信息技术服务。


/

/

长按识别二维码

/ 联系方式 /

址:www.dqzfkj.com

电话:0459-5977330

邮箱:wangya@dqzfkj.com

地址:黑龙江省大庆市让胡路区远望大街112号



去分享

点赞

我在看

【声明】内容源于网络
0
0
正方股份
正方股份是国内首家将大数据人工智能技术研发与国内油田主营业务深度融合的高端信息技术服务公司,主营物联网、大数据、人工智能、云应用、软件研发等业务。
内容 32
粉丝 0
正方股份 正方股份是国内首家将大数据人工智能技术研发与国内油田主营业务深度融合的高端信息技术服务公司,主营物联网、大数据、人工智能、云应用、软件研发等业务。
总阅读12
粉丝0
内容32