Skip to content

服务端与客户端

在 Vue SSR(Server-Side Rendering)环境中,服务器端(server)和客户端(client)各自扮演着不同的角色,它们共同协作以提供一个高效且用户体验良好的应用。下面是关于 server 和 client 在 Vue SSR 中的作用的详细介绍:

服务器端 (Server)

1. 首次请求处理

当用户首次访问应用程序时,请求会发送到服务器。服务器负责接收这个 HTTP 请求,并根据 URL 确定应该渲染哪个页面。

2. 路由匹配与组件选择

服务器使用 Vue Router 来解析 URL 并找到匹配的路由。然后它会选择对应的 Vue 组件来构建页面结构。

3. 数据预取

为了确保页面加载时所有必要的内容都已经准备好,服务器会在渲染之前执行 asyncData 或其他类似的数据获取逻辑。这可能涉及调用 API、查询数据库等操作,以获得最新的或特定于该页面的数据。

4. 渲染为 HTML 字符串

一旦所有的组件都被选择并且所需的数据都已获取,服务器将使用 vue-server-renderer 将整个 Vue 应用程序渲染成一个完整的 HTML 字符串。这个过程包括将状态信息注入到 HTML 中,以便客户端可以重新激活这些状态。

5. 发送响应

最后,服务器将生成的 HTML 响应发送回客户端浏览器。这意味着用户几乎立刻就能看到页面的主要内容,而不需要等待 JavaScript 完全加载和执行。

客户端 (Client)

1. 激活静态 HTML

当静态 HTML 被发送到客户端后,浏览器开始解析并显示页面。此时,虽然用户已经可以看到页面的内容,但交互性尚未恢复——例如点击按钮不会触发任何动作。

2. 水合(Hydration)

接下来,客户端 JavaScript 文件会被下载并执行。Vue 的核心库会“激活”(也称为“水合”,hydration)静态 HTML,使之变成交互式的 Vue 应用程序。在这个过程中,Vue 会对比服务器端生成的 DOM 结构与预期的客户端 DOM 结构,只更新差异部分,从而保证两者的一致性。

3. 接管后续交互

一旦水合完成,Vue 应用就完全接管了页面的控制权,所有的用户交互(如点击事件、表单提交等)都将由客户端代码处理。此外,客户端还可以处理导航变化,动态加载新页面或组件,而无需再次向服务器发起完整请求。

4. 保持状态同步

为了让客户端能够继续使用从服务器接收到的数据,通常会将这些数据作为全局变量嵌入到 HTML 中(例如通过 <script> 标签)。这样,当客户端初始化 Vuex Store 或者其他状态管理工具时,它可以读取这些初始状态,确保服务器端和客户端的状态一致。

总结

  • 服务器端:主要职责是在首次请求时快速生成 HTML 内容,并预取数据,以提升首屏加载速度和 SEO 效果。
  • 客户端:则负责激活静态 HTML,使其成为可交互的应用程序,并处理后续的所有用户交互和状态管理。

通过这种方式,Vue SSR 实现了服务器端和客户端的良好分工,提供了更快的首屏加载体验,同时也保留了现代单页应用(SPA)的灵活性和互动性。

Released under the MIT License.