不了解web的历史,很难理解为什么现在流行在服务器端渲染html。今天的服务器端渲染html和过去的渲染方式不一样,使用的技术、方法、手段都不一样。不是旧瓶装旧酒,而是旧瓶装新酒。技术变革的很大一部分原因在于无法满足当前网络数据供给的瓶颈。
渲染这个词起源于游戏和3D设计领域。渲染的意义在于,它不是简单的画一幅图呈现给其他人,而是保存位置、颜色、法线、纹理、光照等。数据形式的对象。当有人需要检查时,它会再次准确地再现。再现的过程就是渲染。

渲染过程将接受描述具有固定点的3D对象的原始数据作为处理的输入,然后计算其分段。这些片段是像素的3D投影,包含位置、颜色、法线、纹理、光照等。渲染的像素被输出到显示屏。
浏览器端呈现和服务器端呈现的区别
页面渲染的本质是浏览器将HTML文本转换成页面的过程。页面渲染大致需要经历以下几个步骤:
1.用户输入URL后,浏览器请求服务器获取HTML文本。
2.然后就是HTML文本解析的过程。首先,构建DOM树。如果遇到内联样式和样式脚本,需要下载并构建样式规则。如果你遇到一个Javascript脚本,它将被下载并执行。
3.DOM树和样式规则建立后,渲染过程会将它们合并成一棵渲染树,然后渲染过程会对渲染树进行布局,产生布局树。渲染过程绘制布局树并生成绘图记录。

4.渲染过程将布局树分为多个层,并对每个层进行栅格化,以获得一个复合帧,然后将其发送到GPU进程并显示在浏览器页面上。
服务器端渲染会在浏览器请求页面的URL时组装我们需要的HTML文本,然后返回给浏览器。浏览器可以直接构建DOM树并显示到页面,无需Javascript执行。客户端渲染是指浏览器请求URL时,服务器端直接返回空的静态HTML文件,服务器端不需要任何检查数据库和模板组装的操作。浏览器得到这个HTML文件后,启动样式表和脚本。该脚本将请求服务器提供的API来获取数据。获取数据后,Javascript脚本会将数据动态渲染到页面上,完成页面的显示。
web的发展历史
web1.0时代没有AJAX,几乎所有的应用都是在服务器端渲染的。浏览器请求页面的URL后,服务器端会准备好一切,包括数据库查询的数据,组件模板等。,并将其返回给浏览器,浏览器不需要任何Javascript的参与。
然而,随着人们期望的提高,web服务变得越来越复杂。再加上AJAX的出现,web1.0服务器端渲染暴露出了很多不足。比如我们每点击一个页面的小模块,就需要再次请求页面,再次查询数据库,重新组装加载一次html。Javascript、jsp、php、asp的混合代码,使得web应用的维护非常困难。

nodejs出现后,网页开始被当作SPA,即独立应用。前端接管所有页面渲染,服务器端只负责数据查询和处理API。
在SPA的发展过程中,许多问题逐渐暴露出来。比如不利于搜索引擎SEO。Javascript日渐臃肿,导致第一批渲染速度没有web1.0时代的服务器端渲染快,于是再次应用服务器端渲染。当浏览器请求一个URL时,前端服务器会根据不同的URL向后端服务器请求数据。请求之后,前端服务器会用特定的数据组装一个HTML文本,返回给浏览器。浏览器将呈现页面,同时加载并执行Javascript脚本。当我们请求跳转到另一个页面时,浏览器会执行Javascript脚本,同时向后端服务器请求数据,获取数据后再次执行Javascript脚本动态渲染页面。
最后
服务器端渲染和客户端渲染的进化史,其实就是前后端工程师的血泪史。早期后端一直鄙视前端js太简单,前端无非就是剪图写js特效。前端工程师根本不是程序员。
现在前端翻了,完全摆脱了后端指指点点。如今,一段代码可以由服务器和客户端同时呈现。


