Skip to content

SSR

👉 next

👉 nuxt

👉 vite-ssr

👉 vike

👉 Dan Abramov's explanation of SSR, HTML Streaming, and Progressive Rendering

👉 Hydration (web development)

👉 Hydration: What is it?

SSR

在 Web 开发中,SSR服务器端渲染(Server-Side Rendering)的简称。SSR 是 Web 应用程序中一种渲染页面内容的技术,与之相对的是客户端渲染(Client-Side Rendering, CSR)。下面是 SSR 的详细介绍,包括它的工作原理、优缺点以及与 CSR 的对比。

工作原理

服务器端渲染是一种在服务器上生成完整的 HTML 页面的技术,服务器在接收到用户的请求后,会进行以下步骤:

  1. 接收请求:用户的浏览器发出 HTTP 请求,服务器接收到这个请求。
  2. 获取数据:服务器可能需要从数据库或 API 中获取数据,这些数据是用来填充页面内容的。
  3. 渲染页面:服务器使用模板引擎(如 EJS、Pug)或框架(如 Next.js、Nuxt.js)生成 HTML 页面。
  4. 返回 HTML:服务器将生成的完整 HTML 页面返回给浏览器,浏览器随后展示这个页面。

这样,用户在首次访问页面时就能看到完全渲染的内容,而不需要等待 JavaScript 在浏览器中加载和执行。

优点

  1. SEO 友好:搜索引擎爬虫能够更容易地索引 SSR 生成的页面,因为它们返回的是完整的 HTML,而不是需要 JavaScript 才能渲染的内容。
  2. 首屏加载速度快:用户可以在收到第一个请求时立即看到完整的页面内容,减少了白屏时间,提高了用户体验。
  3. 兼容性好:SSR 生成的 HTML 对旧版浏览器更友好,因为它们可能不完全支持现代 JavaScript 功能。
  4. 更好的初始渲染性能:对于复杂的单页应用(SPA),SSR 可以减少首屏内容的加载时间,因为 HTML 内容已经预先生成好。

缺点

  1. 服务器负载高:因为每个页面请求都需要服务器渲染,增加了服务器的负担,尤其是在高并发情况下。
  2. 开发复杂度增加:SSR 的设置和维护比 CSR 更复杂,需要处理服务器端的逻辑和渲染。
  3. 动态更新困难:SSR 生成的页面是静态的,实时更新页面内容需要额外的机制,如 WebSocket 或 Ajax 轮询。
  4. 初始加载时间长:尽管首屏加载快,但因为需要服务器生成 HTML,首次请求的总响应时间可能会较长。

SSR 与 CSR 对比

特性服务器端渲染(SSR)客户端渲染(CSR)
渲染位置服务器客户端(浏览器)
初始加载速度快,首屏内容很快可见慢,需要下载和执行 JavaScript 后才能看到内容
SEO优秀,搜索引擎可以轻松抓取内容较差,需要特殊处理来让搜索引擎抓取内容
服务器负载高,需要服务器处理每个请求低,服务器只提供静态文件
动态更新较为复杂,需要额外的机制容易,使用 JavaScript 即可更新页面内容
兼容性高,对旧版浏览器友好依赖现代浏览器功能,可能不兼容旧版浏览器
开发复杂度较高,需要处理服务器端和客户端代码较低,主要处理客户端代码

典型应用场景

  • 内容管理系统(CMS):需要良好的 SEO 和快速的首屏加载。
  • 博客和新闻网站:需要快速加载和容易被搜索引擎索引的内容。
  • 电商网站:需要较好的首屏加载速度和 SEO 来吸引用户。

框架和工具

  • Next.js:基于 React 的框架,支持 SSR 和静态生成。
  • Nuxt.js:基于 Vue.js 的框架,支持 SSR 和静态生成。
  • Angular Universal:Angular 的 SSR 解决方案。
  • Gatsby:一个基于 React 的静态网站生成器,也可以结合 SSR 使用。

SSR 是一种有效的提高 Web 应用初始加载性能和 SEO 优化的技术,尽管它增加了服务器负担和开发复杂度,但在需要高性能和良好 SEO 的场景中,它仍然是一个非常有价值的选择。

如果你有任何其他问题或想了解更多,请告诉我!

SSR 和 SSG

The only difference between SSG and SSR is when the HTML is rendered:

  • SSG: the HTML of pages is rendered at build-time (when calling $ vite build)

  • SSR: the HTML of pages is rendered at request-time (when the user goes to that page)

服务器端渲染(SSR)静态站点生成(SSG) 是 Web 开发中两种不同的页面渲染方法,它们在生成页面的时间点和使用场景上存在显著差异。下面是 SSR 和 SSG 的详细对比及其应用场景。

工作原理

服务器端渲染(SSR)

SSR是在用户请求页面时,服务器即时生成 HTML 并返回给客户端。其流程如下:

  1. 接收请求:浏览器请求页面。
  2. 获取数据:服务器实时获取需要的数据,可能从数据库或外部 API 获取。
  3. 生成 HTML:服务器将数据与模板结合生成完整的 HTML。
  4. 返回响应:生成的 HTML 页面发送回浏览器,浏览器展示页面。

这种方式每次用户请求页面时都会生成最新的内容。

静态站点生成(SSG)

SSG是在构建时(构建应用时或部署前)生成静态 HTML 文件,这些文件在服务器上是静态的,不会在用户请求时重新生成。其流程如下:

  1. 构建时间获取数据:在构建过程中,系统从数据库或 API 获取所有需要的数据。
  2. 生成静态页面:系统将数据与模板结合,生成静态 HTML 文件。
  3. 部署静态文件:这些静态 HTML 文件被部署到 Web 服务器或 CDN。
  4. 响应请求:用户请求页面时,服务器直接返回预生成的静态 HTML。

由于页面是预生成的,用户请求时无需再进行动态渲染。

优缺点

SSR

优点

  • 动态内容更新快:每次请求页面时,服务器都生成最新内容,适合实时数据应用。
  • SEO 友好:搜索引擎可以直接抓取到完整的 HTML。
  • 快速首屏渲染:浏览器收到的 HTML 已经包含所有内容,不需要额外的 JavaScript 执行。

缺点

  • 服务器负载高:每次请求都需要服务器生成页面,可能影响性能。
  • 复杂性高:需要管理服务器和客户端代码,开发和维护成本高。

SSG

优点

  • 性能优越:因为页面是静态的,可以通过 CDN 快速分发,响应速度非常快。
  • 服务器负载低:页面预生成后,服务器只需要返回静态文件,减少了计算和处理压力。
  • 安全性高:没有服务器端动态生成的过程,减少了攻击面。

缺点

  • 内容更新慢:需要重新构建和部署来更新页面内容,不适合频繁变化的数据。
  • 初次加载时间:页面初次访问时,可能需要下载更多的内容(如 JavaScript 和数据)。

应用场景

SSR 适合的场景

  • 电商平台:产品信息需要频繁更新,用户需要看到实时的库存、价格等信息。
  • 社交媒体:用户生成的内容需要实时展示,如评论、帖子等。
  • 新闻网站:内容更新频繁,用户需要看到最新的新闻。

SSG 适合的场景

  • 博客或文档网站:内容变化不频繁,用户主要是阅读文章或文档。
  • 营销网站:内容相对静态,用户访问时不需要实时更新数据。
  • 公司介绍页面:内容相对固定,不需要频繁更新。

性能对比

  • SSR:页面首次渲染速度较快,因为 HTML 是完整的,但每次请求都需要生成页面,服务器负担较大。
  • SSG:页面响应速度最快,几乎是静态文件的读取速度,但首次访问可能需要加载更多内容。

开发体验

  • SSR:需要考虑服务器端代码和客户端代码的协作,开发环境可能需要更多配置。
  • SSG:开发过程更接近传统的静态网站开发,通常只需要一次性生成页面,开发环境相对简单。

典型框架和工具

SSR 框架和工具

  • Next.js(React)
  • Nuxt.js(Vue.js)
  • Angular Universal(Angular)

SSG 框架和工具

  • Gatsby(React)
  • Hugo(Go)
  • Jekyll(Ruby)
  • Nuxt.js(Vue.js)

总结

SSR适合需要实时更新和动态生成内容的场景,能够提供快速的首屏加载和良好的 SEO 支持,但需要更多的服务器资源和更复杂的开发配置。而SSG则适合内容相对固定、不需要频繁更新的场景,能够提供极快的页面加载速度和较低的服务器负载,但需要重新生成和部署页面来更新内容。

选择 SSR 还是 SSG,主要取决于应用的需求、内容更新频率和对性能的要求。理解这两者的区别和应用场景,能够帮助开发者更好地选择合适的技术方案。