【vue高频面试题—基础篇】:对SSR的理解 什么场景下会使用到 有什么优缺点

63 阅读4分钟

Vue 的服务器端渲染(SSR,Server-Side Rendering)是一种在服务器端生成 HTML 的技术,它将客户端 Vue 组件渲染为 HTML 字符串并发送到浏览器。SSR 与传统的客户端渲染(CSR)相比,主要在性能和 SEO 方面具有优势。

Vue SSR 的理解

  1. 什么是 SSR Vue SSR 是通过在服务器上运行 Vue 应用,将完整的页面 HTML 提前生成,并将其直接发送到浏览器。浏览器接收到 HTML 后,只需要加载必要的 JavaScript 文件来完成后续的交互。

  2. 基本流程

    • 服务器接收到请求时,运行 Vue 应用实例并生成 HTML。
    • 将生成的 HTML 和必要的 JavaScript 打包后发送给客户端。
    • 客户端加载并激活 Vue 应用,使得页面能够正常交互(即 客户端激活)。

适用场景

  1. SEO 需求强烈的项目

    • 搜索引擎爬虫通常对动态加载内容(SPA)支持有限。SSR 生成的 HTML 更利于搜索引擎爬取和索引。
    • 例如:博客、新闻门户、电子商务等对 SEO 敏感的项目。
  2. 首屏渲染性能优化

    • 对于首屏内容较多、加载时间较长的应用,SSR 可以显著提升首屏渲染速度,改善用户体验。
    • 例如:大型电商网站、在线教育平台、实时数据展示系统等。
  3. 社交媒体分享

    • 社交媒体(如微信、Facebook、Twitter)抓取网页时需要读取静态 HTML 以生成分享摘要或预览,SSR 能确保页面分享内容完整。

优点

  1. SEO 友好

    • 提供静态 HTML,搜索引擎能轻松抓取页面内容,解决了 SPA 的 SEO 难题。
  2. 提升首屏加载速度

    • 客户端接收到的是完整的 HTML,用户能快速看到内容,尤其在网络条件较差时。
  3. 改善用户体验

    • 在用户等待时立即提供内容,而不是显示加载状态。

缺点

  1. 增加服务器负载和复杂性:服务器需要执行渲染组件的工作,这会增加服务器的计算资源消耗。同时,服务器端的配置和维护也会变得更加复杂,需要考虑如何高效地处理大量的渲染请求。
  2. 开发和调试难度增加:与传统的 SPA 开发相比,SSR 涉及到服务器端和客户端的代码交互,开发和调试过程会更加复杂。例如,在服务器端渲染时可能会出现一些在客户端不会出现的问题,如缺少某些浏览器环境下的 API 等。
  3. 缓存策略复杂:由于服务器端渲染的页面内容可能会受到用户状态、数据变化等多种因素的影响,制定合理的缓存策略会比较复杂,以避免不必要的重复渲染。

总结

  • 何时用 SSR 当项目对 SEO、首屏渲染速度或分享内容有明确需求时,可以考虑使用 SSR。
  • 何时不用 SSR 如果项目主要是后台管理系统、用户交互性极强但 SEO 不重要的应用,或首屏内容较少的项目,直接使用 CSR 即可。

较大概率引出下面的追问:

  1. 关于 SSR 原理细节 你能详细说一下服务器端渲染时,组件的生命周期钩子是如何执行的吗?

    在服务器端渲染时,只有beforeCreatecreated钩子会被调用。因为服务器端主要是为了获取初始数据用于渲染,像mounted等涉及到浏览器 DOM 操作的钩子不会执行,避免在服务器环境下因没有真实 DOM 而出现问题。

  2. SSR 项目中如何处理数据预取?

    在组件的 asyncData 或路由钩子中发起数据请求,服务端渲染时提前获取数据并注入到 HTML 中。客户端渲染时使用同样的数据,避免重复请求。

  3. SSR 如何处理状态同步?

    服务端通过 window.__INITIAL_STATE__ 将 Vuex 或其他全局状态序列化注入到 HTML。客户端启动时,直接用该状态初始化 Vuex,保证前后端一致。