SSR 是 Server-Side Rendering(服务端渲染)的缩写,指的是在服务器端将 Vue 组件渲染成 HTML 字符串,然后直接发送给客户端的技术。
与客户端渲染(CSR)的主要区别
Vue SSR 的核心优势
-
更好的 SEO:搜索引擎爬虫可以直接获取完全渲染的页面
-
更快的内容到达时间:用户无需等待所有JavaScript下载执行完就能看到内容
-
更一致的用户体验:特别在慢速网络或低性能设备上表现更好
Vue SSR 的基本工作原理
-
服务器端:
-
创建Vue实例
-
渲染为HTML字符串
-
将状态(store/route等)嵌入到HTML中
-
-
客户端:
-
接收服务器渲染的HTML
-
"激活"(hydrate)静态HTML使其变为动态Vue应用
-
接管后续的交互和路由
-
实现Vue SSR的方式
-
手动配置:使用
vue-server-renderer
包自行搭建SSR环境 -
Nuxt.js:基于Vue的SSR框架,提供开箱即用的SSR解决方案
npx create-nuxt-app my-ssr-app
-
Vite SSR:使用Vite构建工具配置SSR
基本示例代码
// 服务器入口文件
import { createSSRApp } from 'vue'
import { renderToString } from 'vue/server-renderer'const app = createSSRApp({data: () => ({ count: 1 }),template: `<button @click="count++">{{ count }}</button>`
})renderToString(app).then((html) => {// 输出渲染结果console.log(html) // <button>1</button>
})
适用场景
-
SEO要求高的内容型网站(新闻、博客、电商等)
-
社交媒体分享需要正确预览的页面
-
首屏加载速度要求极高的应用
注意事项
-
生命周期钩子:只有
beforeCreate
和created
会在服务端执行 -
特定代码:避免在服务端使用浏览器特有API(如window、document)
-
数据预取:需要在渲染前获取所有必要数据
-
复杂度:比纯客户端应用更复杂,需要考虑服务端和客户端两种环境
SSR虽然能解决某些特定问题,但也会增加开发复杂度和服务器成本,应根据项目实际需求权衡是否采用。