服务端渲染与nuxt.js

139 阅读2分钟

服务端渲染SSR

先回顾下浏览器的解析渲染流程, 以浏览器输入URL为例

解析html数据包内容并渲染,可能存在回流、重绘过程

  • 解析html文本,构建dom树, 若遇到js脚本(未设置defer或者async属性)则会阻塞解析并下载执行js脚本(预加载扫描器会加速这个过程)
  • 解析css样式,构建css规则树(CSS Rule Tree)
  • 合并dom tree和css Rule tree为渲染树render tree
  • 根据渲染树计算节点的布局,确定节点的大小、位置(第一次计算称为布局,随后的计算为回流)
  • 遍历渲染树,绘制节点(将布局阶段计算的框转换为屏幕上的实际像素点), 注意:当绘制数量较大时,为了提升绘制性能,通常会布局树进行分层处理,合并后进行绘制

image-20200730191954015.png

SSR与CSR、SSG

客户端渲染CSR:前后端分离的渲染模式,浏览器解析渲染html时,加载执行页面中的js脚本(可能包含网络请求)获取数据进行页面渲染; 适合交互性强,不需要SEO的项目

服务端渲染SSR:前端服务端(node.js)请求数据,组装html文本,客户端下载html进行解析渲染; 有利于首屏渲染、SEO, 但同时会增加代码复杂度以及增加服务器压力

静态站点生成SSG:

应用场景: 静态管网,技术文档

打包时生成包含内容的html文件,这种方式页面加载速度最快,一般打包时确定所有页面的内容或者小部分通过CSR来更新(结合CSR和SSG)

对比图如下:

客户端渲染(现在广泛使用的前后端分离模式) 客户端渲染.png


早期的服务端渲染 2a70e8e65d8d9520ba4806cdef37c021.png


基于node的服务端渲染 服务端渲染.png

同构/通用

一份代码既能客户端渲染,也能服务端渲染

vue项目同构

初识nuxt

参考链接: 浏览器的工作原理服务端渲染