JavaEE 前后端分离以及优缺点
前端概念
前端是一切直接与用户交互的页面或软件(用户看得见、摸得着)的统称,比如各种网站网页、andorid 手机各种 App、苹果手机各种 app、微信小程序、网络游戏客户端等。所以,普通人使用计算机打交道最多的就是前端了。既然有这么多种前端交互形式,其背后当然涉及大量的前端开发技术了。
如果有人对你说自己是前端开发工程师,其实这是一个很笼统的说法,就好比说我是一名老师。如果你是懂行的,肯定会追问他是做哪方面前端开发呢?这就好比问一个老师,你是教语文还是数学或其他学科。
那么,按照前端技术可以将前端大致分为五大类,分别是前端 Web 网页开发、前端Android手机App开发、前端苹果手机App开发、以及微信小程序开、客户端网络游戏开发。当然,使用不同的前端开发技术,在公司也对应有不同的前端开发岗位。目前用得最多的前端开发技术主要是 Web 网页开发技术了,具体而言就是html、css、js、jquery、vue、react 等(还有很多技术没写)。记得 android 智能手机出来时,因为对手机 app 需求量很大,所以从事 android app 前端开发非常火爆,但是现在 app 已经开发得差不多了,所以 android 前端开发工程师需求量就没那么多了。
一个人要想精通前端所有开发技术,这几乎是不可能的,这就好比一个老师想要能够教授所有学科一样。能够精通一两门前端开发技术,其实都已经很牛逼了。
后端概念
后端是一切不直接与用户交互的软件或程序的统称(用户一般感受不到后端的存在)。那后端是干嘛的呢?后端的作用就是保存用户数据和处理前端发送过来的各种请求。说白了,后端是为前端提供服务的,所以后端一般称为后端服务器。如果前端是游戏客户端,那么后端就是游戏服务器端。如果前端是 Web 网页,那么后端就是 Web 服务器啦。如果前端是 App,那么后端就是 app 服务器哈。
和前端技术相比,后端涉及的开发技术更多,遇到的问题也更复杂。想一想就明白了,前端好比顾客,后端好比服务员,谁更累一些嘛。所以,从事后端开发相对而言,待遇也会高一些哈。如果你是想要踏入 IT 行业,首选就要面临选择学习前端还是后端,这个需要根据自己的兴趣还有条件掂量一下哈。
前面说过目前前端开发主要是针对 Web 页面开发,那么后端开发主要也就是针对 Web 服务器开发。而 Web 服务器开发技术哪家强?首先,你得知道有多少家技术嘛?比如 node.js、php、python 、asp、asp .net、ruby、 java 等。既然有这么多家呀,到底哪家强呢?只能告诉你,各有各的美。当然,我也得告诉你,目前大型企业级 Web 服务器开发使用最多的技术就是 Java,称为 JavaEE。这也是 Java 技术的主要应用方向,很多童鞋学习 Java 就是为了以后出来从事 JavaEE 企业级开发。当然,Java 技术还有一个重要应用方向,那就是大数据啦。
前后端分离概念
现在我们对前端和后端有一些基本概念了吧。简单说,前端就好比电影里的演员,后端就好比电影里的导演。在你眼前晃来晃去、风光无限的是演员就好比前端,而默默无闻的幕后英雄是导演就好比后端。
那前端和后端哪个重要呀?就好比电影,有了好的演员,如果没有好的导演和剧本,那也白搭;有了好的导演和剧本,如果遇到票房毒药演员,也是毁三观。所以,前端和后端都很重要,缺一不可。
那前后端分离是怎么回事?是不是演员和导演要分家。当然不是,前后端分离是一种演员和导演合作的方式罢了,可以让演员和导演更好的配合,共同完成一部电影。所以,前后端分离是一种架构模式,能够更好的开发企业级 Web 项目。
前后端分离已成为互联⽹项⽬开发的业界标准使⽤⽅式,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器 ,⻋载终端,安卓,IOS等)打下坚实的基础,这个步骤是系统架构从猿进化成⼈的必经之路。
前后端分离的核心思想是前端 html 页⾯通过 ajax 调⽤用后端的 restuful api 接⼝并使用 json 数据进行交互。
前后端分离带来开发人员分离
以前的 JavaWeb 项⽬⼤多数都是 Java程序员自编自导,也就是既搞前端,⼜搞后端。
随着时代的发展,渐渐的许多⼤大⼩小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,⼀个⼈如果什么都会,那么他毕竟什么都不不精。
⼤中型公司需要专业⼈才,⼩公司需要全才,但是对于个⼈职业发展来说,专才比全才会更有市场竞争力。
- 对于后端 Java 开发工程师:
应该把精⼒放在 Java 基础,设计模式,JVM 原理,spring、springmvc 以及 mybatis 原理及源码,linux,mysql 事务隔离与锁机制,mongodb,http/tcp,多线程,分布式架构,弹性计算架构,微服务架构,Java 性能优化,以及相关的项⽬管理等。
记住后端追求的是:三⾼(⾼并发,⾼可⽤,⾼性能),安全,存储,业务等。
- 对于前端 Web 开发工程师:
应该把精⼒放在 html5,css3,jquery,angularjs,bootstrap,reactjs,vuejs,webpack,less/sass,gulp,nodejs,Google V8 引擎,javascript 多线程,模块化,⾯向切⾯编程,设计模式,浏览器兼容性,性能优化等。
记住前端追求的是:页⾯表现,速度流畅,兼容性,⽤户交互体验等。
这就是所谓的术业有专攻,这样你的核⼼竞争力才会越来越强,正所谓你往生活中投⼊什么,生活就会反馈给你什么。并且前后端的发展都越来越⾼深,技术越来越复杂,你想什么都会,那你毕竟什么都不可能精。
通过公司将团队分成前后端团队,让两边的开发⼯程师更加专注各⾃的领域,独⽴治理,然后构建出⼀个全栈式的精益求精的团队。
前后端分离的优势
-
可以实现真正的前后端解耦。前端服务器使⽤ nginx。前端/WEB服务器放的是 css,js,图片等⼀系列静态资源,前端服务器负责控制⻚⾯引用、跳转、路由,前端⻚⾯异步调用后端的接口,后端/应⽤服务器使⽤ tomcat,加快整体响应速度。
-
发现 bug 可以快速定位是谁的问题,不会出现互相踢皮球的现象。⻚⾯逻辑,跳转错误,浏览器兼容性问题,脚本错误,⻚⾯样式等问题,全部由前端⼯程师来负责。接⼝数据出错,数据没有提交成功,应答超时等问题,全部由后端⼯程师来解决。双⽅互不⼲扰,前端与后端是相亲相爱的⼀家人
-
**在高并发情况下可以同时水平扩展前后端服务器 **。⽐如淘宝的⼀一个⾸⻚就需要 2000+ 台前端服务器做集群来抗住日均多少亿+的⽇日均pv
-
减少后端服务器 的并发/负载压力。除了接⼝以外的其他所有 http 请求全部转移到前端 nginx 上,接口的请求调⽤tomcat,参考 nginx 反向代理tomcat。且除了了第一次页面请求外,浏览器会大量调用本地缓存
-
后端服务暂时超时或者宕机了,前端页⾯也会正常访问,只不过数据刷不出来⽽已
-
支持多段应用。如果你需要有微信相关的轻应用,那样你的接⼝完全可以共用,如果也有 app 相关的服务,那么只要通过⼀一些代码重构,也可以⼤量复用接口,提升效率
-
ajax 异步加载。⻚⾯显示的东西再多也不怕
-
nginx 支持⻚面热部署,不⽤重启服务器 ,前端升级更无缝
-
增加代码的维护性他易读性(前后端耦合在一起的代码读起来相当费劲)
-
提升开发效率,因为可以前后端并⾏开发
-
前端⼤量的组件代码得以复用,组件化使开发效率得以提升
前后端分离的劣势
-
要求前后端开发工程师配合更加密切。在开需求会议的时候,前后端工程师必须全部参加,并且需要制定好接⼝⽂档,后端⼯程师要写好测试⽤例
-
加重了前端团队的工作量,减轻了后端团队的⼯作量,这一点可能只对前端工程师来说是劣势吧:)
总结
-
前后端分离并⾮仅仅只是⼀种开发模式,⽽是⼀种架构模式(前后端分离架构)。千万不要以为只有在撸代码的时候把前端和后端分开就是前后端分离了了,需要区分前后端项⽬。前端项目与后端项目是两个项目,放在两个不同的服务器 ,需要独⽴部署,两个不同的工程,两个不同的代码库,不同的开发人员。
-
前后端工程师需要约定交互接⼝,实现并行开发,开发结束后需要进行独立部署,前端通过 ajax 来调⽤ http 请求调⽤后端的 restful api。前端只需要关注页面的样式与动态数据的解析和渲染,⽽后端专注于具体业务逻辑等。