Java知识点大全开发模式Spring总结

最近学到的前后端分离知识

2019-08-08  本文已影响84人  Java3y

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

前后端分离这个词相信大家都听过,不知道大家是怎么理解的呢。前阵子看项目的时候,有一段实现硬是没看懂,下面来给大家说一下一段愚蠢的经历哈。

(我没正正式式写过前端,所以如果文章有错的地方希望可以在评论区友善交流~)

一、交代背景

我一直都知道我现在的这个系统是前后端分离的,我的接口只会返回JSON出去,但我不曾关心前端是怎么处理我的JSON数据的(以及他是怎么跑通和运行的)

在某一天,我在查接口的时候,习惯F12,想直接看一下这个请求返回的JSON数据是什么。但是一看,在network返回的是html格式:

请求的信息

于是,我就很好奇啊,就看一下这个接口是不是我想象中的那个。于是就去找我的接口,看一下是不是真的返回JSON(我还专门Debug了一下,看看是不是真请求到这个接口上了):

接口信息

得出的结果是:我的接口的确是返回JSON数据,浏览器的reponse返回的的确是HTML格式

于是,我就去找我前端的小伙伴,去问了一下这是怎么搞的。他回复我说:“在浏览器看到返回的是页面,那肯定是你们后端干的呀”

我说:“没有啊,我Java接口返回的是JSON数据啊,是不是中途你们用node做了些处理啊?”(我之前听过Node.js,但仅仅是听过)

他说:“Node.js也是你们后端的啊。”

我一听,啊?Node.js不是属于前端的吗?

二、初识Node.js

在遇到这个事情之前,其实我在知乎已经看了一个帖子,话题名是这个《毕设答辩,老师说node不可能写后台怎么办?》

有兴趣的小伙伴可以去了解一下,大多数内容还是挺通俗易懂的:

我在下载Node.js的时候,发现其简介十分简洁

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.


Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时。

然后点进去Chrome V8引擎,再看了一下介绍:

V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others.


V8是Google的开源高性能JavaScript和WebAssembly引擎,用C ++编写。它用于Chrome和Node.js等。

看了介绍,一脸懵逼,这是啥玩意啊。下面我来解释一下

2.1 V8引擎是什么?

众所周知,JavaScript是解析型语言,我们写好的JavaScript代码会由JavaScript引擎去解析,而V8是JavaScript引擎的一种。

示意图

总结:V8引擎是JavaScript引擎的一种,这个引擎由C++来编写的,性能很不错。

参考资料:

2.2回到Node.js

浏览器为了安全,没有为JavaScript提供一套IO环境,而一门后端语言是肯定能进行网络通信、文件读写(IO)的。

后来,有牛逼的人把V8引擎搬到了服务端上,在V8引擎的基础上加了网络通信、IO、HTTP等服务端的函数。取了一个名字叫:Node.js

搬运

所以,Node.js是运行在服务端的,只不过在基础语言是JavaScript。

三、前后端分离入门

回顾一下自己学JavaWeb的历程:

目前我了解到的前后端分离,首先部署是分离的(至少不会跟Java绑定在一起部署):

前端和Java部署机器分离

Java接口只返回JSON数据:

Java接口都只返回JSON格式的数据

关于前端这几大框架:angular/vue/react这几个我都是没有写过的,所以也就不多BB了。我一直想知道的是:前框框架和node是啥关系。问了一下前端的小伙伴,他回复是大致这样的:

前端现在是讲究工程化的,工程化用到了node而已(就是打包编译那些会用到,项目里面真正跑起来的话是没有这些东西的)

-----------以下引用摘录:

Webpack、Less、Sass、Gulp、Bower以及这些工具的插件都是Node上开发的---@知乎陈龙

举个例子:随着发展,前端的JavaScript需要依赖的包也非常复杂,类比于Java我们会有Maven,而前端现在有npm包管理

参考资料(为什么要使用 npm):

3.1 方式一(Nginx+Server)

OK,现在假设我们用前端(vue/angular/react)开发完,开发环境下将JavaScript编译/打包完,那我们能得到纯静态的文件。我们可以直接将纯静态文件放到Nginx(CDN)等等地方【只要能够响应HTTP请求就行】。

如果请求是调用后端服务,则经过Nginx转发到后端服务器,完成响应后经Nginx返回到浏览器。

3.2 方式二(加入Node.js)

在前边的基础上加入Node.js,至于为啥要Node.js,一个重要的原因就是:加快首屏渲染速度,解决SEO问题

加入Node.js,此时的请求流程应该是这样的:

架构图

浏览器发起的请求经过前端机的Nginx进行分发.

URL请求统一分发到Node Server,在Node Server中根据请求类型从后端服务器上通过RPC服务请求页面的模板数据,然后进行页面的组装和渲染;

API请求则直接转发到后端服务器,完成响应。

最后

好的,现在问题来了:你是觉得Node.js归属在后端还是前端?

看得不过瘾?推荐一下我认为不错的文章和资料:

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,关注即可获取!

转发到朋友圈是对我最大的支持!

觉得我的文章写得不错,点

上一篇下一篇

猜你喜欢

热点阅读