程序开发中:什么是先后端分离?你搞清楚了吗?

今天这篇文章来分析一下什么是先后端分离的相关知识,不少小伙伴不清楚到底什么是前端,什么是后端,什么是先后端分离。在说先后端分离以前,咱们先要弄清楚这几个概念,你们可能常常听到前端,后端或者是大前端的一些概念,这些概念是怎么产生的呢?什么是前端,什么是后端,什么是先后端不分离?只有了解了这些,那么先后端分离你就懂了。php

首先我讲一下什么是前端,在讲前端以前我先问你们一个问题,咱们常常提到的JavaScript是前端吗?用JS写的程序是前端吗?仍是说只有前端工程师写的程序才叫前端?我常提到HTML,CSS这是前端吗?或者是咱们经常使用的一些APP,或者是一些小程序,这些是前端吗?那么大前端又是什么呢?这些问题抛出来之后,刚开始学习编程的同窗估计都有想放弃学习编程的这种想法了。前端

没有关系,也没有你想的那么复杂。在一般的状况下,咱们说的这个前端都是指浏览器这一端,而浏览器这一端一般是用JS来实现的,因此用JS写大部分的程序都是前端,包括APP,包括小程序和H5等。而当nodeJS出现之后,用nodeJS写的后台部分,也会被人归为前端,为了区分以前的前端,给他起了一个名字叫作大前端。可是呢咱们想一下,用这种语言来区分先后端他真的合适吗?我实际上是持有保留态度的。node

对于先后端的定义,我认为他不该该是以语言来定义,而是应该以他的运行环境去定义,若是实在服务端器的话,应该被称为后端,由于什么呢?由于你既看不到也摸不着。而运行在客户端,就应该被称为前端,由于你可以看获得。程序员

咱们再看一下什么是先后端不分离,在移动互联出现以前,有一种流行的说法叫作B/S和C/S架构,C/S架构指的就是Client Server,意思就是说在桌面程序上有一个客户端,而后链接远程的这个服务器端,用socket或者是http来传输数据。而B/S架构是什么呢,就是指的是用经过浏览器进行访问,不须要装一个客户端,B/S架构曾经一度被认为是C/S的替代者,好处是什么呢?就是它不须要安装,简单方便。因此那个时候的写法就是后端是控制一切的,因此在早期的Web开发过程当中,咱们你们都据说过什么PHP程序员啊,Java程序员啊或者是asp程序员,你们要干的活就是“全栈”,也就是说先后端通吃。那么当时的技术是怎样的呢?看一下这张图:web

程序开发中:什么是先后端分离?你搞清楚了吗?

一般开发一个web的这种应用程序,可能是以asp,php或者jsp这样的语言来编写,项目一般是由多个这种文件构成的,每一个文件当中同时包含了HTML,CSS,JS这样混编的,系统总体负责处理业务逻辑,控制业面跳转和向用户展现业面等。编程

而这个浏览器是什么呢?浏览器他是一个翻译官,他是翻译程序员写的代码给用户看的,翻译的过程其实有一个高大上的词,不少人把他称之为渲染。也就是说咱们在日常看到的一些漂亮的这个网页就是浏览器渲染出来的。这个架构的好处是什么呢?就是简单便捷。可是这么作其实有一个明显的弊端,若是这个页面复杂一点的话,那这个单页的代码就比较恐怖了,少则上千,多则上万。小程序

因此说在之前的开发过程当中,前端设计师通常只扮演一个切图的工做,只是简单地将UI设计师设计出来的原型图把它编程静态的HTML业面,好比说业面的交互逻辑,好比说后台的数据交互,这些工做都是由后台开发人员来实现的,并且更有可能的是什么呢,是后端的开发人员直接兼顾前端的对口工做,一边实现API的接口一边要开发网页,两个相互切换着作。这致使了后台程序员开发的工做压力特别大,这样不只开发效率比较缓慢,并且代码难以维护。而咱们讲的先后端分离的话下面来看一下这张图片:
程序开发中:什么是先后端分离?你搞清楚了吗?
先后端分离除了解决分工不均的这个问题以外,主要是将更多的交互的这个逻辑分配给前端来处理,然后端能够专一于本职的工做,好比说API接口,或者是进行权限控制,或者是进行运算这些都交给后端。那么前端就能够独立完成与用户交互的这样一个过程,在先后端分离的这个应用模式当中,后端仅返回前端所须要的这样的一个过程,不须要渲染HTML业面和控制前端的这样一个效果。后端

至于说用户看到什么样的效果呢,从后端请求的数据展示都是后端经过异步接口,不如说经过AJA/JSON这种方式提供的,前端只管展示,可是呢你不要觉得只是在敲代码的这个时候把前端和后端进行分开就是先后端分离了。它完全是解放了前端,前端不须要在向后台提供模板,或者是后台无需再前端HTML中嵌入后台的代码,二者能够同时开工,不须要相互依赖,使得这样的开发效率大大的提升。浏览器