SSR
对比
SPA单页面应用
优点:
- 只需要加载一次
- 更好的用户体验 [切断页面不卡顿]
- 可轻松的构建功能丰富的 Web 应用程序
缺点:
- 不利于SEO,返回的是空白HTML, 爬虫无法爬取到数据
- 受屏渲染速度慢,项目体积比较庞大
- 大文件可能变得难以维护
SPA详解
- SPA 应用默认只返回一个空的 HTML 页面,如: Body 中只有 ``
- 而整个应用程序的内容都是通过 JavaScript 动态加载,包括应用的程序逻辑、UI以及与服务器通信相关的所有数据。
SPA流程图:
SSG静态站点生成
优点:
- 有利于SEO
- 访问速度快
缺点:
- 不利于展示实时性内容,实时性的更适合SSR
- 如果站点内容更新了,那必须 重新再次构建和部署
SSR服务器端渲染
优点
- 更快的首屏渲染速度
- 更好的SEO
缺点
- 服务器成本高
- 增加一定的开发成本
SSR流程:
Vue3+SSR
Node-server搭建
控制台安装相关依赖
1 |
|
src / server / index.js 基本服务器,启动服务
1 |
|
src / config / server.config.js 配置打包结果
1 |
|
vue3 + ssr
控制台安装相关依赖
1 |
|
src / config / client.config.js 配置打包结果
1 |
|
水合
- 需要在 src/client/index.js 中 createApp 然后挂载到 app 上,这个 app 是 src/server/index.js 中 res.send(``````````) 中 div 所挂载的 app
- res.send() 是后端返回给前端的渲染页面, 其中 appStringHtml 是处理后端 createSSRApp 所创建出来的 app
<script src="/client/client_bundle.js"></script>
是将 client 打包的结果与 server 进行水合。
跨请求状态污染
- 由于是 SSR 后端进行渲染,所以我们会在后端请求的代码中,针对每一个浏览器请求的 App 都进行重新创建一个全新的实例。
- 在创建App或路由或Store都是采用函数的方式来创建的,防止不同域名下的浏览器访问到的 app 是同一个,从而导致请求状态污染。
优化
1 |
|
config / base.config.js
1 |
|
多页面SSR-Router
1 |
|
router / index.js
1 |
|
水合Hydration:
1 |
|
效果展示:
Pinia
安装相关依赖
1 |
|
注意:
- 避免跨请求状态污染,需要在每个请求中都创建一个全新的pinia
- 客户端和服务器端都需要各自创建pinia
- 页面中pinia使用方法与Vue一致
src / store / index.js
1 |
|
水合Hydration:
1 |
|
SSR
http://example.com/2023/12/24/SSR/