前言只有光头才能变强。文已收录在我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y前后端分离这个词相信大家都听过,但不知道大家是怎么理解的它。前段时间看项目的时候,有一段实现我就是没看懂。让我告诉你一个愚蠢的经历。(我没有正式写过前端,所以如果文章中有什么不对的地方,希望大家在评论区友好交流~)1.说明背景。返回JSON就出去了,但是我从来不关心前端是怎么处理我的JSON数据的(以及它是怎么跑通和运行的)。有一天,我在查看界面的时候,习惯了F12,想直接看一下这个请求返回的response是什么JSON数据。但是一看网络返回的是html格式:so,我很好奇,就是想看看这个界面是不是我想象中的。于是我去我的界面看是否真的返回了JSON(我也特意调试了一下,看是否真的是在这个界面请求的):结果是:我的界面确实返回了JSON浏览器响应返回的数据确实在HTML格式。所以,我去找我的前端小伙伴,问问发生了什么事。他回复我说:“你看到浏览器返回的页面,肯定是你后台做的。”我说:“不是,我的Java接口返回的是JSON数据,你是不是中途用node做了?”你处理过吗?”(之前听说过Node.js,只是听说而已)他说:“Node.js也是你的后端。”一听,嗯?Node.js不是吗属于前端吗?2.初识Node.js在遇到这件事之前,其实在知乎上看了一篇帖子,话题名是这样的《毕设答辩,老师说node不可能写后台怎么办?》有兴趣的朋友可以去了解一下,大部分的内容相当通俗易懂来自:https://www.zhihu.com/question/327657434/answer/704249816下载Node.js的时候发现它的介绍非常简洁:Node.js?isaJavaScriptruntimebuilt在Chrome的V8JavaScript引擎上。Node.js?是一个基于Chrome的V8引擎的JavaScript运行时。然后点进ChromeV8引擎,再看一遍介绍:V8是谷歌开源的高性能JavaScript和WebAssembly引擎,用C++编写。它用于Chrome和Node.js等。V8是Google的开源高性能JavaScript和WebAssembly引擎,用C++编写。高性能JavaScript和WebAssembly引擎,用C++编写。它用于Chrome和Node.js等。看完介绍,我惊呆了,这是什么鬼?现在让我解释一下2.1V8发动机是什么?众所周知,JavaScript是一种分析型语言。我们写的JavaScript代码都会被JavaScript引擎解析,而V8就是JavaScript引擎的一种。传统意义上,我们会认为解析器是一个一个解析(边执行边解析),但为了提高JavaScript的解析速度(相当于提高用户体验),在解析时做了一些“手脚”.V8引擎:为了提高解析性能,引入了一些“后端”技术(不过最初是用C++写的)。它首先将JavaScript源代码转换成抽象语法树,然后从抽象语法树生成字节码。如果发现某个函数被多次调用或者是一个循环体(热代码)被多次调用,那么这部分代码就会被编译优化。说白了就是:编译热点代码,直接解析非热点代码。总结:V8引擎是JavaScript引擎的一种。这个引擎是用C++写的,性能非常好。参考资料:https://zhuanlan.zhihu.com/p/27628685https://zhuanlan.zhihu.com/p/737683382.2回到Node.js浏览器为了安全,没有JavaScript的IO环境,而是一个后台endlanguage肯定是能够进行网络通信,文件读写(IO)的。后来有大神把V8引擎搬到了服务端,在V8引擎中加入了服务端的网络通信、IO、HTTP等功能。举个名字:Node.js为例,通过libuv库读取文件,建立TCP/UDP连接。通过xxx库解析HTTP请求和响应...这些库都是用C/C++写的。因此,Node.js运行在服务器端,但基本语言是JavaScript。3、前后端分离简介回顾一下自己学习JavaWeb的过程:刚开始学习Servlet的时候,会在response对象上写一些HTML代码,输出到浏览器看看效果。后来学了JSP后,纯粹用Servlet做控件,JSP做视图。JSP本质上还是一个Servlet,只是看起来像一个HTML文件。编译的时候还是会变成一个HttpJspPage类(这个类是HttpServlet的子类)。后来学习了AJAX技术,发现可以通过AJAX进行交互。AJAX请求Servlet,Servlet返回JSON数据,AJAX获取Servlet返回的数据进行解析处理。这里根本不需要JSP(纯HTML+AJAX)。JavaScript代码不容易重用。在部署方面,还是和Java一起部署(放在resource下),前端没有单独部署。后来学习了一些常用的模板引擎(比如freemarker),在实用上和JSP差别不大,但是性能比JSP好很多。……流下无知的泪水。目前学习到的前后端分离,首先是部署分离(至少不会和Java一起部署):Java接口只返回JSON数据:关于前端-endframeworks:没写过angular/vue/react,所以BB不多。一直想知道的是:前端框架和节点是什么关系。问了前端哥们,他的回复大致是这样的:现在前端讲究工程化,工程化只用node(就是打包编译的都会用,没有这个)项目实际运行中的事情)------------摘录如下:Webpack、Less、Sass、Gulp、Bower,这些工具的插件都是在Node上开发的——-@智荣陈龙举个例子:随着开发,前端JavaScript需要依赖的包也很复杂。类比Java,我们有Maven,现在前端有npm(包管理),npm是和Node.js一起安装的。所以前端(vue/angular/react)在开发环境中离不开Node.js(编译、打包等)参考资料(为什么要用npm):https://zhuanlan.zhihu.com/p/243577703.1方法一(Nginx+Server)可以,现在假设我们使用前端(vue/angular/react)在开发环境中开发并编译/打包javascript,就可以得到纯静态文件。我们可以直接把纯静态文件放在Nginx(CDN)等地方[只要能响应HTTP请求]。如果请求是调用后端服务,则通过Nginx转发给后端服务器,完成响应后通过Nginx返回给浏览器。3.2方法二(加入Node.js)在上一个基础上加入Node.js。至于为什么需要Node.js,一个重要的原因是:加快首屏渲染速度,解决SEO问题加入Node.js。请求流程应该是这样的:浏览器发起的请求,通过前端机器的Nginx进行分发。URL请求统一分发到NodeServer。在NodeServer中,根据请求类型通过RPC服务向后端服务器请求页面的模板数据,然后进行页面的组装和渲染;API请求直接转发给后端服务器完成响应。最后,问题来了:你觉得Node.js属于后端还是前端?不喜欢看?推荐我觉得不错的文章和资料:https://segmentfault.com/a/1190000009329474https://www.zhihu.com/question/267014376https://cnodejs.org/topic/565ebb193cda7a91276ff887https://github.com/yalishizhude/前后端分离乐于输出干货Java技术公众号:Java3y。公众号200多篇原创技术文章,海量视频资源,精美思维导图,关注获取!我觉得我的文章写的不错,点个赞!
