SSR CSR SSG

152 阅读4分钟

早期SSR

SSR,即Server Side Rendering。翻译过来的意思就是服务端渲染

早期指的是前后端不分离的开发模式,即前端代码写完后嵌入到后端的JSP/PHP中,由后端服务渲染完数据后直接返回一个完整的HTML页面,里面的数据都已经渲染好了。

SSR优点

  • SSR的首屏加载速度

SSR缺点

  • 服务器压力大
  • 前后端代码在一起,不利于后期维护

CSR

SSR相对的叫做CSR,即Client Side Rendering。翻译过来的意思就是客户端渲染,现在的开发模式,大多数都是CSR

为什么要有CSR

早期SSR模式下,几乎都是静态内容,即不用编写太多的JavaScript,仅用HTML+CSS编写页面,然后扔给后端开发人员就可以。而现在的页面需要大量的交互,它们都需要编写JavaScript来完成,而且整个前端项目也比以前要复杂的多,文件量和代码量都远远超过了早期。如果还是用早期的SSR模式,服务器压力会很大。

CSR的运行模式

CSR典型的代表是SPA,即单页应用Single Page Application。如今Vue/React都是这种类型的框架。

客户端通过访问域名,向前端服务器请求静态资源(HTML/CSS/JS),向后端服务器请求数据。

CSR模式下,因为前后端的分离,多了一个数据交互的步骤,前端需要通过Ajax/fetch向后端发送请求才能得到数据,然后再将数据渲染到页面上。

原理示意图如下: image.png 既然是这样,那么我们在上面图片的步骤3得到的HTML就很有可能没有完全“渲染”出来。因为,浏览器收到html时候进行解析,解析到js的请求代码时候才会去访问后端服务器,详情参考# 输入url后浏览器做了什么,经过步骤5之后,才可能得到完整的渲染好的页面。这样的缺点是明显的,不利于爬虫抓取或者搜索引擎优化(Additional Search Optimization,简称 SEO),首屏加载速度也更慢

CSR缺点

  • 不利于爬虫抓取或者搜索引擎优化(Additional Search Optimization,简称 SEO)
  • 首屏加载速度更慢

CSR优点

  • 因为前端的静态资源与后端是分开的,可以对静态资源进行CDN缓存,提高页面的加载速度。
  • 将渲染的资源消耗由服务端转为客户端的浏览器承担,减轻服务端的压力,后端可以专注于业务逻辑的处理。
  • 局部刷新,这也是Ajax/fetch带来的好处,通过异步获取数据,修改HTML可以实现页面的局部刷新。

现在前端的SSR

由于SSR的首屏加载速度等优点。我们仍然需要它,因为直接返回渲染好的HTML在某些场景下很有用。

但是我们又不想回到过去那种古老的方式,于是,专属于前端的SSR诞生了。是的,前端也可以单独做SSR

原理示意图如下: image.png 你可能听过Nuxt.js/Next.js等框架,它们都专注于基于流行的前端框架(Vue/React)做SSR。

可以看到,Front End Server接管了浏览器的初始渲染工作,所以浏览器可以直接得到渲染好的HTML

这种方式,结合了早期的SSR的优点,又保留了SPA的优点。

现在前端的SSR缺点

前端的SSR需要在服务器上跑NodeJs,所以,我们需要一个NodeJs的服务器。这就意味着如果你想要使用SSR,你需要自己搭建一个NodeJs服务器。不能使用一些第三方的CDN服务托管你的前端资源

SSG

为什么我们需要从后端获取数据?
因为数据是动态的

那假如我们的数据是不变的呢?(个人博客等)
是不是就不需要从后端获取数据了?是不是可以把数据直接写入到HTML中?

SSG就这么诞生了,根据已有的SPA,在本地打包的时候,计算生成HTML页面,然后可以直接部署

原理示意图如下: image.png

原文链接:blog.csdn.net/qq_53225741…