1. 为什么需要服务端渲染?
在传统的前端开发中,我们通常使用客户端渲染(CSR)的方式。这种方式下,浏览器首先会下载一个几乎为空的HTML文件,然后通过JavaScript动态生成内容。虽然这种方式开发体验良好,但也存在几个明显的问题:
- 首屏加载时间较长:用户需要等待所有JS加载并执行完毕后才能看到完整页面
- SEO不友好:搜索引擎爬虫难以抓取动态生成的内容
- 低性能设备体验差:在老旧手机或网络环境差的情况下,白屏时间会明显延长
服务端渲染(SSR)正是为了解决这些问题而生。它的核心思想是在服务器端预先渲染完整的HTML,然后将其发送给客户端。这样用户能立即看到内容,而无需等待JS加载完成。
注意:SSR并不是万能的解决方案。它增加了服务器负载,且开发复杂度高于纯客户端应用。通常建议在SEO需求强烈或首屏性能要求高的场景下使用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Vue 3 SSR核心架构解析
2.1 基本工作原理
Vue 3的SSR实现主要依赖两个关键部分:
- 服务器端:使用
@vue/server-renderer将Vue组件渲染为HTML字符串 - 客户端:通过"hydration"(水合)过程将静态HTML转换为可交互的Vue应用
整个流程可以简化为:
- 服务器接收请求
- 创建Vue应用实例
- 渲染组件为HTML字符串
- 发送包含完整HTML的响应
- 客户端下载JS后执行hydration
2.2 与Vue 2 SSR的主要区别
Vue 3在SSR方面做了多项改进:
- 更高效的渲染器:重写了虚拟DOM实现,渲染速度提升2-3倍
- 更小的包体积:
@vue/server-renderer比Vue 2的vue-server-renderer小了约30% - 更好的TypeScript支持:所有API都有完整的类型定义
- Composition API:在SSR环境下使用更灵活的逻辑复用方式
3. 从零搭建Vue 3 SSR项目
3.1 基础项目配置
首先创建一个新的Vue 3项目:
bash复制npm init vue@latest vue3-ssr-demo
然后安装SSR相关依赖:
bash复制cd vue3-ssr-demo
npm install @vue/server-renderer express
项目目录结构调整如下:
code复制├── src
│ ├── client # 客户端入口
│ │ └── entry-client.js
│ ├── server # 服务器入口
│ │ └── entry-server.js
│ ├── App.vue
│ ├── main.js # 通用应用创建逻辑
│ └── router.js # 路由配置
├── server.js # Express服务器
└── index.html # 应用模板
3.2 关键代码实现
main.js(通用应用创建)
javascript复制import { createSSRAp
