Logo
Section 1 / 4

客户端渲染与服务器端渲染

了解客户端渲染和服务器端渲染的优势与缺点,包括它们对网页应用性能的影响。

导入

客户端渲染与服务器端渲染

了解客户端渲染和服务器端渲染的优势与缺点,包括它们对网页应用性能的影响。

客户端渲染(CSR)

Vue 的默认渲染机制是客户端渲染(Client-Side Rendering, CSR),这意味着应用程序的 HTML 是在浏览器下载并执行 JavaScript 之后由浏览器生成的。这种方案能提供快速且交互性强的用户体验,但在 SEO 和初始页面加载速度方面可能并非最佳选择。

其工作流程如下:

...
CSR 中服务器与客户端的责任分工

CSR 的处理流程如下:

  • 用户在浏览器中输入 URL 后,客户端(浏览器)向服务器请求静态资源。
  • 服务器接收到浏览器对应用页面的请求。
  • 服务器返回一个极简的 HTML 页面,其中包含对 JavaScript 打包文件的引用。
  • 浏览器接收 HTML 入口文件和 JavaScript 打包文件后,开始渲染视图。
  • 浏览器负责处理用户路由。在首次请求之后,不再向服务器请求静态资源,除非应用使用了某些组件的懒加载机制,此时服务器仅提供浏览器渲染所需的必要组件。

如上述步骤及示意图所示,在生成用户界面的过程中,客户端承担了大部分计算任务,而服务器仅提供基础资源。这对服务器而言是优势,因为它需要处理的任务更少。

优点

  • 快速响应的用户界面:CSR 可实现快速页面加载和更快的交互响应,因为客户端无需等待服务器完成页面渲染,从而带来更流畅、更灵敏的用户体验。这对于需要频繁更新的应用(如社交媒体平台或实时仪表盘)尤为有利。

  • 提升开发效率:CSR 允许开发者构建复杂的用户界面,而无需依赖服务端渲染技术。这意味着可以使用更广泛的前端库和框架,有助于实现前后端职责分离——将后端与前端分别作为独立项目开发,从而提高团队协作效率和代码质量。

缺点

  • 对客户端资源的依赖:CSR 假设客户端具备足够的处理能力与内存来渲染视图并挂载到 DOM 容器中。然而,实际情况并不总是如此。如果客户端设备资源有限(如老旧电脑或移动设备),可能难以高效渲染复杂网页或运行高负载的 JavaScript 代码,导致页面加载缓慢、界面无响应,严重影响用户体验。

  • SEO 不利:使用 CSR 可能对搜索引擎优化(SEO)造成负面影响。由于大量内容通过 JavaScript 动态生成,搜索引擎爬虫在抓取时可能无法获取完整内容。结果可能导致网站在搜索结果中的排名较低,可见度下降。虽然存在一些缓解方法,但往往实现复杂,有时还会增加打包体积。

服务端渲染(通用渲染模式)

服务端渲染(Server-Side Rendering, SSR),在 Nuxt 中也称为“通用渲染模式”,是一种替代方案,用于在 Web 应用中生成 HTML。与 CSR 不同,SSR 在将页面发送给客户端之前,先在服务器上完成 HTML 的生成。这种方式可带来更好的 SEO 效果、更快的首屏加载速度以及更强的可访问性。但同时也伴随着更高的服务器负载和较慢的交互就绪时间等缺点。

其工作流程如下:

...
SSR 中服务器与客户端的责任分工

SSR 的处理流程如下:

  • 浏览器向服务器发送页面请求。
  • 服务器根据模板渲染出目标页面的 HTML 文件,并整合来自 API 或数据库的动态数据。
  • 服务器将预渲染好的 HTML 文件和 JavaScript 打包文件一并发送给浏览器。
  • 浏览器接收到 HTML 文件后,立即渲染初始界面供用户查看,同时开始下载并执行 JavaScript 包。
  • 水合(hydration)过程启动,JavaScript 开始接管,使页面具备交互能力,例如响应用户操作。
  • 当用户请求其他页面时,浏览器重复上述流程。

优点

  • 更快的页面加载(客户端无需承担渲染负担):在 SSR 模式下,服务器预先渲染好页面的 HTML 内容并发送给浏览器,浏览器只需下载并执行必要的 JavaScript 来实现交互功能。这大大降低了对客户端资源的需求,显著缩短页面加载时间,整体提升用户体验。

  • 有利于 SEO:良好的 SEO 表现意味着搜索引擎能够获取足够多的相关内容进行索引。SSR 在服务端提前生成完整的页面内容,使得搜索引擎爬虫可以直接读取到完整信息,从而提升网站在搜索结果中的可见性和排名。

  • 提升网页可访问性:SSR 能够为屏幕阅读器等辅助技术提供完全渲染的内容,帮助视障用户或其他特殊需求用户更好地访问网页。这不仅改善了更多用户的体验,也有助于网站符合无障碍设计规范和法规要求。

缺点

  • 增加服务器负载与响应延迟:SSR 会增加服务器的计算压力和响应时间,尤其是在高并发场景下。因为每次请求都需要在服务器上重新渲染 HTML 页面。相比之下,CSR 在首次加载后更加高效,仅需在客户端完成渲染。

总结

客户端渲染(CSR)是一种利用 JavaScript 在客户端生成内容和用户界面的 Web 开发方式。它能带来快速响应的界面、较低的服务器压力以及更灵活的开发流程,但也存在一些不可忽视的问题。其中最突出的是对 SEO 的不利影响——大量通过 JavaScript 动态生成的内容可能无法被搜索引擎有效抓取,导致网站排名偏低、曝光不足。

此外,CSR 对用户设备的性能要求较高,若设备资源有限,可能导致页面加载缓慢甚至卡顿,影响用户体验。

服务端渲染(SSR)则是在服务器端预先生成页面的 HTML 内容,再发送给客户端。这种方式能显著改善 SEO、加快首屏加载速度,并在低性能设备上表现更佳。但代价是增加了服务器的负担,可能导致后续页面加载变慢。

因此,在选择开发方案时,应综合权衡客户端渲染与服务端渲染各自的优缺点,根据项目需求做出合适决策。

附录

混合渲染与静态站点生成