作为web开发工程师,我们在搭建网站时,需要针对网站应用场景来使用不同的技术栈实现。比如是否需要seo,对网站首屏渲染速度是否敏感等等。使用不同的渲染方式对网站打开速度和体验有着一定的影响。目前比较流行有四种渲染方式,分别是CSR,SSR,SSG,ISR。

那么这四种渲染方式分别有什么优缺点呢,接下来我们来详细对比下。

CSR(Client-Side Rendering)

CSR(Client-Side Rendering)是客户端渲染的简称,客户端渲染指的是服务端返回一个简单的html和外部link和script标签,通过加载外部脚本在浏览器执行渲染操作。CSR通常返回的html结构通常如下

<!DOCTYPE html>
<html>
  <head>
    <title>Kelen’s Blog</title>
    <link rel="stylesheet" href="/umi.1ca9308c.css" />
  </head>
  <body>
    <div id="root"></div>
    <script src="/umi.04d73f36.js"></script>
  </body>
</html>

目前Vue和React,Angular项目默认的渲染方式都是CSR。

CSR
CSR

CSR的优点

  • 前端部署简单,只需要一个静态服务。
  • 对服务器的压力小,可以降低服务器成本。
  • 用户可以获得很好的交互体验。

CSR的缺点

  • 由于首次加载的html无内容,不利于SEO。
  • 白屏时间会比较长,导致LCP指标比较高,不利于首屏渲染。
  • 对于低端设备或慢速网络,可能会出现载入延迟的问题。

SSR(Server-side Rendering)

SSR(Server-side Rendering)是服务端渲染的简称,服务端渲染又称为动态渲染,指的是在服务器完成数据获取和渲染成完整的页面,直接传输给客户端,用户可以直接看到完成的内容。服务端渲染相当于把客户端渲染(CSR)的缺点给抹平了。Vue和React框架也诞生出了相应的服务端渲染框架,分别是Nuxt.jsNext.js。JSP,Nest.js这些后端服务框架也是传统的服务端渲染模式。

SSR
SSR

SSR的优点

  • 搜索引擎可以抓取到完整的html内容,有利于SEO。
  • 首次加载即可展示完整内容,首屏渲染时间耗时短。

SSR的缺点

  • 前端需要通过服务器渲染,需要加中间件,例如 express.js 或者 nest.js 等服务。
  • 服务器承担渲染工作,如果用户访问量大,对服务器配置要求高,增大成本。
  • 用户体验不好,页面之间切换都需要重新渲染整个页面。

SSG(Static Site Generation)

SSG(static site generation)是静态站点生成的简称,SSG是把网站在构建阶段生成好静态html到磁盘,直接当作静态服务来供用户访问。SSG把CSR和SSR的优势都集中到一起了。市面上诞生的Docusaurusvuepress等框架都是使用SSG技术。

SSG
SSG

SSG的优点

  • 前端部署简单,只需要一个静态服务。
  • 对服务器的压力小,可以降低服务器成本。
  • 用户可以获得很好的交互体验。
  • 搜索引擎可以抓取到完整的html内容,有利于SEO。
  • 首次加载即可展示完整内容,首屏渲染时间耗时短。

SSG的缺点

  • 使用场景受限,对数据频繁变更或者实时性要求过高的场景不适用,例如电商,新闻类的。
  • 每次部署都需要重新构建,当然也可以进行增量构建,技术实现上难度较高。

ISR(Incremental Static Regeneration)

增量静态重新生成 (ISR) 建立在 SSG 之上,允许按需重新生成页面的动态部分。这意味着页面的某些部分可以是静态的,而其他部分可以在数据更改时重新获取展示。ISR在性能和内容新鲜度之间取得了平衡,使其适合内容经常更新的应用程序。

ISR流程图
ISR流程图

ISR作为新的web渲染模式,吸取了CSR,SSR,SSG的优点,剔除了缺点,是搭建网站的最优选择,不过实现起来难度也相对比较复杂,目前Next.js框架已经实现了ISR渲染模式,感兴趣可以阅读这篇文章Incremental Static Regeneration,自己动手实践下。

DRP(Distributed Persistent Rendering)

与 ISR 一样,DPR 允许在开始时从初始渲染中排除选定的页面,以减少构建时间。与 ISR 不同,已经渲染的页面不允许进行任何内容更新,从而保证了页面和构建的不变性。使用 DPR,延迟页面(即从初始渲染中排除的页面)将按需生成并缓存,但不会立即保留。DPR 适用于博客或者杂志等类型网站。

DPR
DPR

上文提及了数种页面渲染方法,这些方法适用于不同的应用场景,并且各有千秋。然而,没有一种方法可以独占鳌头,每一种方法都有其优势和局限性。在选择最佳渲染方法时,必须考虑到特定的应用场景和实现难度。