vue SSR服务端渲染
引言
服务器端渲染(Server-Side Rendering,简称 SSR)是指在服务器端生成 HTML 内容并发送到客户端的过程。与客户端渲染(Client-Side Rendering,简称 CSR)相比,SSR 可以提高首屏加载速度和 SEO 友好性。
如需更高级的集成框架可以使用nuxtjs
文件结构
1 | my-ssr-app/ |
构造流程
1. 安装必要的依赖
SSR 需要一些额外的依赖包,如 @vue/server-renderer
和 express
。在项目根目录下运行以下命令安装这些依赖:
1 | npm install @vue/server-renderer express webpack-manifest-plugin webpack-node-externals --save-dev |
相关版本:
1 | "@vue/cli-service": "~5.0.0", |
2. 配置 Webpack
SSR 需要两个 Webpack 配置:一个用于客户端打包,另一个用于服务器端打包。服务器端需要输出node环境的编译输出,为了拿到对应入口的路径,需要借助WebpackManifestPlugin形成映射表。
vue.config.js
1 | const path = require("path"); |
3. 改造main.js
main文件不再直接挂载vue实例,改造为方法提供给客户端、服务端渲染调用。
1 | import { createSSRApp } from "vue"; |
4. 创建入口文件
创建两个入口文件:entry-client.js
和 entry-server.js
。
entry-client.js
1 | import { createApp } from "./main"; |
entry-server.js
1 | import { createApp } from "./main"; |
5. 创建服务器
创建 server.js
文件,用于设置 Express 服务器:
1 | const express = require("express"); |
6. 构建和运行
在 package.json
中添加构建和启动脚本:
1 | "scripts": { |
运行以下命令构建项目并启动服务器:
1 | npm run build |
访问 http://localhost:8080
,你将看到服务器端渲染的 Vue 应用。
SSR优缺点
优点
- 更快的首屏加载速度:SSR 可以在服务器端生成完整的 HTML 页面,减少客户端渲染的时间,从而提高首屏加载速度。
- 更好的 SEO:搜索引擎可以更好地抓取和索引服务器端渲染的内容,从而提高 SEO 友好性。
- 更好的用户体验:SSR 可以在用户请求页面时立即返回完整的 HTML 内容,减少白屏时间,提高用户体验。
缺点
- 更复杂的配置:SSR 需要额外的 Webpack 配置和服务器端代码,增加了项目的复杂性。
- 更高的服务器负载:服务器需要处理更多的渲染任务,可能会增加服务器的负载。
- 开发调试困难:SSR 的调试和开发相对复杂,需要处理更多的边界情况和错误。