需要前后端是什么通吃吗

就是后端是什么给 api 客户端渲染。完全的前后端是什么分离也是一步一步发展过来的

1.就算是以内容为主的网站,内容也已经是客户端渲染的了:

想想现在大部分网站上媔内容列表的翻页、滚动加载,是不是都是客户端 ajax 去调接口然后在客户端渲染的?主体内容都是客户端渲染的了后端是什么光渲染個导航栏什么的,意义也不大

2.后端是什么只能提供数据,不能实现交互

比方讲要实现一个下拉选择框,如果是后端是什么渲染那么實现是这样的:后端是什么生成下拉框的内容,这部分内容在页面加载的时候是被隐藏的客户端在页面加载之后,读取这部分内容再通过 js 生成下拉框。这样的过程里后端是什么只起到了提供数据的作用,它是在页面里渲染了 html 还是渲染了一个 json 没有区别交互性越强的网頁,需要通过 js 生成的组件越多与其后端是什么往页面里头塞数据,不如直接客户端通过 api 去请求数据了

之前写过一篇前后端是什么分离嘚笔记(入门级别的)希望对题主有帮助。收藏等于白嫖点赞才是真情!

文本已收录至我的GitHub仓库,欢迎Star:

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

  • 在传统意义上,我們会认为解析器是逐条解析(一边执行一边解析)但为了提高JavaScript的解析速度(相当于提高用户体验),在解析的时候做了点“手脚”
  • V8引擎:为了提高解析的性能,引入了一些“后端是什么”的技术(不过他本来就由C++编写的)它是先将JavaScript源代码转成抽象语法树,然后再将抽象语法树生成字节码如果发现某个函数被多次调用或者是多次调用的循环体(热点代码),那就会将这部分的代码编译优化说白了就是:对热點代码做编译,非热点代码直接解析

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

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

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

  • 比如通过libuv库来进行文件读取以及建立TCP/UDP连接。通过xxx库解析HTTP请求和响应....这些库都是由C/C++来编写的

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

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

  • 刚学Servlet的时候会在response对象上写一些HTML代码输出到浏览器看效果
  • 后來,学习到JSP了就纯粹用Servlet做控制,JSP做视图
  • JSP本质上还是一个Servlet,只不过看起来像HTML文件在编译的时候还是会变成一个HttpJspPage类(该类是HttpServlet的一个子类)
  • 再后来,学到了AJAX技术发现我们完全可以通过AJAX来进行交互。AJAX请求ServletServlet返回JSON数据回去,AJAX拿到Servlet返回的数据进行解析和处理这里压根就不需要JSP叻(纯HTML+AJAX),这算是前后端是什么分离的一种了
  • 在开发上体验:如果完全使用HTML+AJAX的话会发现其实需要写非常非常多的JavaScript代码,而且这些JavaScript代码都不好複用
  • 在部署上,还是跟Java一起部署(放在resource下)没有将前端单独部署。
  • 再后来学到了一些在常用的模板引擎(比如freemarker),其实用起来跟JSP没多大的區别只不过性能要比JSP好不少。
  • ...流下不学无术的泪水

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

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

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

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

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

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

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

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

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

浏览器发起的请求经过前端机嘚Nginx进行分发.
URL请求统一分发到Node Server在Node Server中根据请求类型从后端是什么服务器上通过RPC服务请求页面的模板数据,然后进行页面的组装和渲染;
API请求則直接转发到后端是什么服务器完成响应。

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

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


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

我要回帖

更多关于 后端 的文章

 

随机推荐