首先要明确一个概念,为什么要服务端渲染?
最开始JAVA做的JSP动态页面渲染技术就是在服务端渲染,为什么node.js出现之后,大量的前后端分离技术都不再使用JSP来做渲染,而是该用了其他的渲染引擎。
其实最难的地方在于JSP要求的技术栈比较高
- JSP需要了解并且熟练掌握EL表达式和JSP实现的动态标签。
1.1 随之而来的JSP出现的问题就是要求页面实现者必须要掌握服务器端的controller返回的视图数据, - JSP页面需要灵活的
import
,对一个开发者要求又高了一步 (需要JS/HTML/CSS)熟练的技术
上述的内容本来是要一个人来实现的功能,无奈问题在于一个人精力有限或者是水平有限,无法单独完成,一旦两个人合作,就会出现合作上难以协调的问题。
以上几点是我在做JSP开发时候,体验最深刻的几点,也是这些年叫嚣着要前后端分离的同事们的难言之隐吧。
前后端分离
最早开始接触前后端分离的时候,我一度以为前端是在开倒车,重复造轮子,但是仔细看到了服务端渲染的实现方式之后,发现 SSR技术相比传统的JSP还是有不同之处,且相比之前服务器端提出的动态模板技术也有着不同的特点。
vue服务器端渲染 (SSR)
服务端渲染:sever side render
服务端渲染到底都做了那些工作?
最近火热的MVVM技术,虚拟化DOM元素来渲染节点,但是归根结底都是利用JS来操作浏览器的DOM元素,浏览器的DOM元素操作即使再快,也有一个过程,相对于传统的网站性能表现不出,但是相对于电商网站,庞大的DOM节点就会导致渲染的时间过于缓慢,服务端渲染可以利用服务器的环境的代码模拟出浏览器渲染的整个过程(vue.js的完整的生命周期)。让浏览器在接收到访问的页面的时候就能够看到实际的效果,同时又不会丢失vue.js带来的数据绑定的新特性。
相比于传统方式的前后端分离,服务端渲染有一下特点:
- 更好的搜索引擎优化:SEO(Search Engine Optimization),搜索引擎优化最关键的地方在于JS的同步,如果你不能够很好的实现你的JS是同步状态,那么搜索引擎就不会抓取到你的异步内容,也就是说,你的网页在搜索引擎搜索到的时候是一片空白。
- 更快的渲染时间,相对于异步的JavaScript,在网络缓慢的时候,异步的JS会导致用户长时间停留在加载页面,而服务端渲染没有这个过程,就会使得时间进一步缩小。
相比于传统的前后端分离技术,服务端渲染也是有一些局限之处:
- 开发条件优先:相比于整个前端领域,服务端渲染能做的事情极其有限,一些外部的扩展库可能还需要特殊的处理才能够在服务端渲染,
- 涉及到了更多的部署环境,由于多了额外的一个部署环境,需要额外的建立一个node.js服务器(传统的nginx代理不需要)
- 更多的服务器负载,把用户渲染的一部分功能收回到了服务器中做处理,需要服务器更大的cpu运算,为此你可能还需要更多的缓存技术。
现在又回到原有的服务端渲染是在开倒车么(折腾么)?
现在的服务端渲染和传统的服务端模板技术是有相似之处,但是绝对不一样,区别就在于现在的前后端分离把前端页面完整的作为了一个应用程序,有自己独立的模块架构和设计,不再是原来的杂牌军,传统的HTML服务端渲染技术没有模块化,工程化,是一盘散沙,而现在的服务端渲染就只是加速了页面渲染的速度和SEO,可以说是取长补短吧(去其糟粕,取其精华)。