什么是 CSR、SSR 和 SSG?
在现代 Web 开发中,CSR(客户端渲染)、SSR(服务器端渲染)和 SSG(静态站点生成)是三种常见的渲染方式。每种方式都有其独特的优缺点和适用场景。
SSR 全流程详解
请求到达服务器:
- 用户在浏览器中输入 URL 或点击链接,HTTP 请求被发送到服务器。
服务器接收请求:
- 服务器接收到请求后,通常会通过一个 Node.js 服务器(如 Express)来处理请求。
初始化应用程序:
- 服务器会创建一个新的 Vue 实例(或其他框架的实例,如 React、Angular)来处理请求。
- 在这个阶段,应用程序的所有逻辑都会被执行,包括数据获取、路由解析等。
数据获取:
- 服务器会根据请求的 URL 获取所需的数据。这通常涉及到调用 API 或查询数据库。
- 获取的数据会被注入到 Vue 实例中,以便在渲染时使用。
组件渲染:
- 服务器使用 Vue 的 SSR API(如
vue-server-renderer)将 Vue 组件渲染为 HTML 字符串。 - 在这个过程中,Vue 会执行组件的生命周期钩子(如
created和beforeMount),但不会执行mounted及其后的钩子,因为这些钩子依赖于 DOM。
- 服务器使用 Vue 的 SSR API(如
生成完整的 HTML:
- 服务器将渲染的 HTML 字符串插入到一个完整的 HTML 模板中。
- 这个模板通常包含基本的 HTML 结构、CSS 链接、JavaScript 脚本等。
发送响应:
- 服务器将生成的完整 HTML 发送回客户端。
客户端接收 HTML:
- 浏览器接收到 HTML 后,立即显示页面内容。
- 这使得用户可以快速看到页面的初始内容,而不需要等待 JavaScript 加载和执行。
客户端激活(Hydration):
- 浏览器下载并执行 JavaScript 文件。
- Vue(或其他框架)会接管已经渲染的 HTML,并将其转换为一个可交互的应用程序。
- 这个过程称为“激活”或“hydration”,它将静态的 HTML 转换为动态的、可交互的 Vue 应用。
后续交互:
- 一旦激活完成,应用程序的后续交互(如点击事件、表单提交等)将由客户端 JavaScript 处理。
- 这与传统的客户端渲染应用程序的行为相同。
SSR 的优缺点
优点:
- 更快的首屏加载:因为初始 HTML 是在服务器上生成的,用户可以更快地看到页面内容。
- 更好的 SEO:搜索引擎可以更容易地抓取和索引页面内容,因为它们不需要执行 JavaScript 来获取页面内容。
缺点:
- 服务器负载增加:服务器需要为每个请求生成 HTML,这可能会增加服务器的负载。
- 开发复杂性:SSR 需要处理更多的边界情况(如
window对象的使用),这可能会增加开发的复杂性。
其他渲染方式的对比
CSR(客户端渲染):
- 优点:更少的服务器负载,适合动态交互丰富的应用。
- 缺点:首屏加载时间较长,SEO 友好性较差。
SSG(静态站点生成):
- 优点:极快的加载速度,适合内容不常变化的网站。
- 缺点:不适合需要频繁更新内容的应用。
实践建议
- 选择合适的渲染方式:根据项目需求选择合适的渲染方式。对于需要快速首屏加载和良好 SEO 的项目,SSR 是一个不错的选择。
- 优化服务器性能:使用缓存、CDN 等技术来减轻服务器负载。
- 关注开发体验:使用现代框架(如 Next.js、Nuxt.js)来简化 SSR 的开发流程。