怎么理解前后端分离

author author     2023-03-17     612

关键词:

对于前后端分离,认识上有个误区,那就是很多人自称:我们老早就分离了,全AJAX,使用Angular或者什么什么就可以了。

这个说法是不合适的,打个比方,别人问的是逗如何解决家禽把蛋生在水草边的问题看地,但实际上人家养的是鸭子,答题的却是养鸡的,所以回答逗不让去水边就行了地,这显然不在点子上。


两年业界说的前后端分离,是限于偏展示类的系统(用A代替),而不是应用、管控类Web项目(用B代替),在B类项目里,前后端是天然分离的,对此,除了
少部分后端开发人员,基本所有人的认识都是一致的。上一段中这样回答的人一般都是只做B类项目,在B类项目里,前后端分离是共识,不需要讨论。

那么,剩下的问题就是讨论A类项目的前后端分离了。这个问题的核心在什么地方呢,在于模板的与数据结合的位置,以及,模板的控制权在谁手里。经过这两年的讨论,基本上我们可以达成的共识就是:模板应当由前端人员去控制,主要原因有两方面:

- 性能优化(尤其是外部资源的管理与发布,请求合并等等)
- 协作的顺畅性(已形成模板的界面片段的返工等问题)

那么,模板到底应该在什么地方跟数据结合看

这个问题就比较折腾了,有部分人尝试像B类项目那样,使用js模板,然后在浏览器端执行,这是存在一些问题的,比如说seo不友好,首屏性能不够,尤其对于首页DOM量很大的电商类网站,差距很明显。


以我们还是得把主要的模板放在服务端来执行。在这个过程中,阿里作了一些尝试,那就是引入Node层,在这一层把模板与数据进行合成,然后浏览器拿到的就
是生成好的HTML了,但也不是所有HTML都是这么生成好的,还是会有一些内容等到了浏览器之后,再用js去加载和生成。

所以这一定会是一个混合方案,同一个系统中存在两种模板,一种在服务端执行,一种在浏览器中执行,互为补充。


于说这个方案中,是否中间层一定要是node,我觉得无所谓,只要是能正常做web项目的东西都可以,这个还是要看所在企业的技术积累方向,当然node
做这块是有一些优势的,比如对前端人员的语言友好性,前后端模板的通用性等等,但这些都是细节,重点还是整体方案和流程。

这时候回头看你问题中的这句:

> 前后端分离的意思是,前后端只通过 JSON 来交流,组件化、工程化不需要依赖后端去实现。

我相信你这里对前后端的限定是以浏览器为准的,但事实上,A类项目中,前后端的分界一定要延伸到服务器端的模板层,也就是在这一层里,把各种来源的数据整合到模板中,这个数据未必是JSON格式的,会存在有JSON,XML,特定的二进制等等。


件化这个话题就更复杂了,在刚才组织形式中,很难说出究竟什么才是组件。是某个商品的模板吗看是数据吗看是数据和模板的结合体吗看没法回答。在此,我说一
句自己的看法:像电商这种项目的前端部分,基本不存在组件的概念,甚至不存在组件化的价值,因为这里面可复用的东西太少了,也不易提取,大多数东西都是不
带逻辑的界面模板。

最近因为ReactJS的流行,带来了一个Isomorphic的概念,这是一种很有意义的探索,但是否能解决这类问
题,尚不得而知,根据我的理解,它对B类项目是较好的补充方案,但对A类项目暂时还缺乏可用性,因为A类项目中,运行期的DOM变更并不多,多是整片的改
变,用这个方案去解决的话,有些牛刀杀鸡的感觉。

关于B类项目的组件化,我之前那个没写完的系列是关于它的,但经过最近一年多的思考,我又觉得需要再重新写一篇东西了。感谢你的问题提醒了我,这就写。
参考技术A 在学习前端开发的时候,会发现前端开发的知识非常琐碎,前端往往是靠拼凑来完成页面效果,开发过程没有java后端开发有逻辑,代码也很难管理。后端开发有各种各样的工具类、jar包、maven依赖、spring框架等,具有工程化模块化思维,可以满足后期的优化。vue.js和react.js等这些前端框架的出现,它们从本质上打破了以前前端开发的规则,这就是前端开发组件化框架。这些框架出现后,前端开发也开始像后端一样,遵循一套体系来进行约束性的开发,越来越工程化、组件化、迭代化,变得有章可循。前后端分离核心思想是前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互。

关于前后端分离的理解

...g.csdn.net/piantoutongyang/article/details/65446892#reply#reply 个人理解:前后端并未分离的时候:javaweb以前使用sparingMVC+mybatis等方式将jsp经过容器解释成servlet再画成html再返回给前端。此时响应返回的是整个页面。 当前后分离:java... 查看详情

前后端分离与不分离,一点点理解

1>为什么要前后端分离?现有开发模式的使用场景前后端职责不清开发效率的问题对前端发挥的局限2>前后端分离会带来什么变化?  1.彻底解放前端    制作页面的时候,不需要后台配置服务器环境,可以自己配置路由,前... 查看详情

前后端分离

...开始租内讨论的过程中我们发现。每个人对前后端分离的理解不一样。为了保证能在同一个频道讨论,先就什么是"前后端分离"达成一致大家一致认同的前后端分离的例子就是SPA,所有用到的展现的数据都是后端异步接口的方式提... 查看详情

前端经典面试题前后端分离(说一说你理解的前后端分离?)

...据约定等。从某个具体的技术切入来回答对前后端分离的理解本身就是一种局限的看法,所以在回答这个问题的时候应该从以下几个方面展开。 2.为什么要分离?  在以往的很长一段时间里,后端开发才是开发团队里... 查看详情

对java前后端分离的理解

到目前为止,身为一个java后端开发人员的我,在工作期间,无非就是ui设计页面,前端开发html,之后将做好的页面交给我,我负责后台逻辑一件html的页面渲染。好好滴一个后台开发人员,莫名其妙的做起了前端的活,很是心累... 查看详情

asp.net怎么实现前后端分离asp.net如何实现前后端分离

参考技术A1、前后端分离,那后端就不应该修改前端项目文件,并且前后端交互都应通过ajax执行。所以,后端只需要提供api,前端在html调用api即可。2、要提供api的话,aspx也可以做,但因为page的中间件会造成性能的浪费,可以... 查看详情

你是如何看待前后端分离的?

...:APP,网页、桌面程序等,在现实开发中大部分情况可以理解为“客户端”;  “后端”相对来说就更泛化了,可以理解为是为前端提供服务的一端。  ”分离“顾名思义就是将”前端“和”后端进行分开“,但是这里的分... 查看详情

前后端分离浅析

什么是前后端分离?前后端为什么要分离?前后端怎么样分离的?前后端分离给我们前端技术人员的开发带来什么样的好处?下面我就带着这些问题,来简单谈谈我了解到的前后端分离情况。 在讲前后端分离之前,让我们先... 查看详情

基于vue的前后端分离项目实践

...说过,但是直到17年前都没有接触过前后端分离的项目。怎么理解前后端分离?直观的感觉就是前后端分开去做,即功能和职责上的一种划分,前端负责页面的渲染,部分页面交互的逻辑,然后通过网络请求与后端进行数据的交... 查看详情

前后端分离方案以及技术选型

参考技术A作者:关开发一.什么是前后端分离?理解前后端分离大概可以从3个方面理解:1.交互形式2.代码组织形式3.开发模式与流程1.1交互形式前后端不分离后端将数据和页面组装、渲染好了之后,向浏览器输出最终的html;浏... 查看详情

为什么要进行前后端分离?

...。三、实现前后端分离前后端分离大概可以从四个方面来理解: 1.交互形式在前后端分离架构中,后端只需要负责按照约定的数据格式向前端 查看详情

理解restfulapi

...ateTransfer的缩写,中文可以译为表现层状态转化表现层可以理解为资源的表现层,资源在网络通信中无处不在,一段文本,一张 查看详情

什么是前后端分离与前后端不分离

...法完全解决这种问题,但是可以大大缓解。   那该怎么做到前后端分离呢?   前端:负责View和Controller层。  后端:负责Model层,业务处理/数据等。     试想一下,如果前端掌握了Controller,我们可以... 查看详情

aspnetmvc前后端分离项目手记关于跨域问题(还有前言)

...中一些知识点。经过这个项目,也对前后端分离有了更多理解,尤其是在技术之外的方面。   越来越多的项目采用前后端分离的原因,有两点:   1,技术方面的原因:移动端的越来越重要,一个项目可能... 查看详情

angular2中怎么使用mock前后端分离

参考技术Ajava端完全弃用jsp改发api返json数据view独立res文件夹存放angular项目实际纯前端放任何跨域运行两端协商api 查看详情

springboot+vue前后端分离学习路线

...细的知识汇总。其中包括资料,代码实践,以及我对此的理解。1.ssm框架的配置,以及应用,2.SpringBoot的介绍,如何搭建一个Boot项目3.Springboot常用注解的介绍,以及使用4.SpringBoot的属性注入以及基本L配置5.SpringBoot整合View层6. 查看详情

为什么前后端分离了,你比从前更痛苦?

...繁变动?  设计之初没有想好。 这需要提高需求的理解能力和接口设计能力。  变动的成本较低。  德国有句谚语:&ldquo 查看详情

从mvc到前后端分离

 1.理解MVC  MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器。  其中,模型是用于封装数据的载体,例如,在Java中一般通过一个简单的POJO(PlainOrdinaryJavaObject)来表示,其本质是一个普通的JavaBean... 查看详情