Vue.js 2.7 中的服务器端渲染 (SSR) 能够将 Vue 组件在服务器端渲染成 HTML,将完全渲染的 HTML 发送给客户端,然后将静态标记“注水(hydrate)”成客户端上完全交互式的应用程序。本文档涵盖了 Vue 2.7 的 SSR 实现、其架构、主要特性和使用模式。
SSR 提供了多项优势
来源:packages/server-renderer/package.json1-44
Vue 的 SSR 系统充当 Node.js 服务器环境与 Vue 运行时之间的桥梁,将组件渲染成 HTML 字符串或流,可以直接发送给客户端。
来源:packages/server-renderer/package.json1-44
Vue SSR 系统由几个关键组件组成
renderToString 和 renderToStream,用于不同的渲染方法来源:packages/server-renderer/package.json1-44
Vue SSR 提供两种主要的渲染模式
1. 字符串渲染
2. 流式渲染
来源:package.json60 packages/server-renderer/package.json1-44
SSR 包含在服务器上预取数据并将应用程序状态传输到客户端的机制
服务器渲染的 HTML 包含序列化的应用程序状态,客户端 Vue 实例使用该状态进行初始化,从而无需在客户端再次获取相同的数据。
来源:packages/server-renderer/package.json26-34
vue-server-renderer 包提供了 Vue 应用程序服务器端渲染的核心功能
Vue 的 SSR 可以与各种构建工具集成
专用构建目标:
开发和测试:
dev:ssr 脚本:package.json45test:ssr 脚本:package.json52build:ssr 脚本:package.json48Vue 的 SSR 实现包含多项优化
该包包含用于测量性能的基准测试工具
"bench:ssr": "npm run build:ssr && node benchmarks/ssr/renderToString.js && node benchmarks/ssr/renderToStream.js"
Vue 的 SSR 功能依赖于多项依赖
| 依赖项 | 目的 |
|---|---|
chalk | 用于日志和错误的终端输出样式 |
hash-sum | 为缓存生成哈希 |
he | HTML 实体编码/解码 |
lodash.template | 用于 HTML 模板的模板渲染 |
serialize-javascript | 安全地将 JavaScript 序列化并放置在 HTML 中 |
source-map | 用于调试的源映射支持 |
来源:packages/server-renderer/package.json26-34
Vue SSR 包含用于服务器端渲染的特定编译器功能
SSR 编译器专门为服务器渲染生成优化的渲染函数,与客户端渲染函数不同。
来源:src/platforms/web/entry-compiler.ts1-4
服务器端渲染使用专门的过程将 Vue 的虚拟 DOM 转换为 HTML 字符串
在 SSR 期间只有特定的生命周期钩子会运行——特别是 beforeCreate 和 created。与 DOM 相关的钩子(如 mounted 或 updated)不会在服务器上运行。
来源:packages/server-renderer/package.json1-44
在 Vue 2.7 中使用 SSR 时,请注意以下限制
window 或 document 等 API 不可用Vue 2.7 包含了针对 SSR 功能的特定测试
"test:ssr": "npm run build:ssr && vitest run server-renderer"
测试套件验证了核心渲染功能以及与 Vue 生态系统其他部分的集成。
服务器端渲染是 Vue 2.7 中一项强大的功能,它弥合了传统服务器渲染应用程序与现代响应式框架之间的鸿沟。通过首先在服务器上渲染组件,应用程序可以提供更快的初始页面加载速度,同时保持 Vue 应用程序的交互性优势。