1、背景
前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。
核心思想是前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互。
-
Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;
-
应用服务器:一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好;
-
前端在开发过程中严重依赖后端,在后端没有完成的情况下,前端根本无法干活;
-
由于趋势问题,会JSP,懂velocity,freemarker等模板引擎的前端越来越少;
<body>
<%
request.setCharacterEncoding("utf-8")
String name=request.getParameter("username");
out.print(name);
%>
</body>
-
浏览器请求,CDN返回HTML页面;
-
HTML中的JS代码以Ajax方式请求后台的Restful接口;
-
接口返回Json数据,页面解析Json数据,通过Dom操作渲染页面;
-
打开web,加载基本资源,如CSS,JS等;
-
发起一个Ajax请求再到服务端请求数据,同时展示loading;
-
得到json格式的数据后再根据逻辑选择模板渲染出DOM字符串;
-
将DOM字符串插入页面中web view渲染出DOM结构;
-
JS存在大量冗余,在业务复杂的情况下,页面的渲染部分的代码,非常复杂;
-
在Json返回的数据量比较大的情况下,渲染的十分缓慢,会出现页面卡顿的情况;
-
SEO( Search Engine Optimization,即搜索引擎优化)非常不方便,由于搜索引擎的爬虫无法爬下JS异步渲染的数据,导致这样的页面,SEO会存在一定的问题;
-
资源消耗严重,在业务复杂的情况下,一个页面可能要发起多次HTTP请求才能将页面渲染完毕。可能有人不服,觉得PC端建立多次HTTP请求也没啥。那你考虑过移动端么,知道移动端建立一次HTTP请求需要消耗多少资源么?
-
前端:负责View和Controller层。
-
后端:只负责Model层,业务/数据处理等。
-
浏览器请求服务器端的NodeJS;
-
NodeJS再发起HTTP去请求JSP;
-
JSP依然原样API输出JSON给NodeJS;
-
NodeJS收到JSON后再渲染出HTML页面;
-
NodeJS直接将HTML页面flush到浏览器;
我们其实在开发过程中,经常会给PC端、mobile、app端各自研发一套前端。其实对于这三端来说,大部分端业务逻辑是一样的。唯一区别就是交互展现逻辑不同。
我们有时候,会遇到后端返回给前端的数据太简单了,前端需要对这些数据进行逻辑运算。那么在数据量比较小的时候,对其做运算分组等操作,并无影响。但是当数据量大的时候,会有明显的卡顿效果。这时候,node中间层其实可以将很多这样的代码放入node层处理、也可以替后端分担一些简单的逻辑、又可以用模板引擎自己掌握前台的输出。这样做灵活度、响应度都大大提升。
大家应该都知道单一职责原则。从该角度来看,我们,请求一个页面,可能要响应很多个后端接口,请求变多了,自然速度就变慢了,这种现象在mobile端更加严重。采用node作为中间层,将页面所需要的多个后端数据,直接在内网阶段就拼装好,再统一返回给前端,会得到更好的性能。
淘宝首页就是被几十个HTML片段(每个片段一个文件)拼装成,之前PHP同步include这几十个片段,一定是串行的,Node可以异步,读文件可以并行,一旦这些片段中也包含业务逻辑,异步的优势就很明显了,真正做到哪个文件先渲染完就先输出显示。
推荐阅读
1. 一份 Spring Boot 项目搭建模板
2.
Spring Boot 实现应用监控和报警
3. Nginx 从入门到实战
4. 一键式搭建分布式文件服务器
5. 团队开发中 Git 最佳实践
喜欢文章,点个
在看
本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
相关文章
暂无评论...