【nuxt SSR】框架搭建、踩坑记录
Nuxt
ssr
前段时间主负责了一个项目,是一个官网加配置官网展示数据的管理后台,因为产品敲黑板特地的强调了官网seo的重要性,因为之前从来没做过官网,特别是强seo的网页;找前端各大佬帮忙、一起讨论后,最终采用nuxt2.x+vue2+ts技术方案。开始压力还是大大的,再踩了无数个坑之后,终于要上线了,想了想赶紧记录下来,避免以后忘记。
nuxt.config
mode改为’universal’。
模式选择-SPA/Universal
(告诉服务器为ssr渲染)由于是第三方渲染,如果使用了第三方插件,默认ssr项为true,需要手动更改。否则启动项目页面会变成 document is no defined 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15plugins: [
'antd-ui',
'antv-g2plot',
'api',
'inject',
'axios',
'antd/icons',
'vue/component',
'vue/config'
].map(*fileName* *=>* {
return {
src: '@/plugins/' + fileName,
ssr: false // 重点,只在client被打包引用
}
})在使用ssr渲染的时候如果使用的是asyncData方法,则要保存到本地,因为页面只会刷新的时候去请求接口,从客户端点击菜单路由跳转则是只读缓存的数据。(在created生命周期函数之前执行,所以拿不到this实例)
1
2
3
4
5
6
7
8
9
10
11// 如果是在首次加载首页,则从服务器读取数据。
if (process.server) {
}else{
// 读取本地缓存数据
}
mounted() {
// 不论是从哪里获取的数据,都再次存一遍。
if (this.baseInfo) localStorage.setItem('baseInfo', JSON.stringify(this.baseInfo))
}如果是使用fetch方法的话,每次进入页面都会执行这个方法,与store配合食用更佳。
缓存
在一次无聊之际我手贱狂刷新使用了ssr做的首页,突然发现与别的spa发送network请求的页面不一样,没有出现白的闪屏效果,再次感叹ssr的巅峰速度之后,快速按command
+R
不停刷新着,结果突然眼前一灰,出现了下图错误,然后一顿操作猛如虎排查,发现是node服务出问题了,与后端、产品、前端的小伙伴一讨论,决定采用页面缓存,减轻服务器的压力;在调研之后觉得页面缓存最适合目前我的需求,缓存时间为五分钟。
当整个页面与用户数据无关,依赖的数据基本不变的情况下,可以对整个页面做缓存,减小页面获取时间
http://cdn.ruoyao.live/life/wLu2EK4uoR.jpg
1 | middleware/page-cache.js |
1 | nuxt.config.js配置项修改,引入服务端中间件 |
大坑特坑
在ssr中使用vue-awesome-swiper,不能以传统方式去编写,否则是无法顺利编译成对应的html被爬虫捕捉到。
- 以下常规写法在此场景中不适用,如果不需要被捕捉可用
标签包裹:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<swiper
ref="mySwiper"
:options="swiperOption"
class="['swiper']"
@someSwiperEvent="callback"
>
<swiper-slide
v-for="(item, index) in cureentKey"
:key="item"
:class="['swiper-slide', { active: currentImage === index }]"
>
内容
</swiper-slide>
<div slot="button-prev" class="swiper-button-prev"></div>
<div slot="button-next" class="swiper-button-next">
</div>
</swiper>- 以下是正确ssr写法,需要用到**v-swiper这个指令 **:
- 以下常规写法在此场景中不适用,如果不需要被捕捉可用
1 | <div |
1 | // 轮播图参数 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不吃草的羊!
评论