2022-05-06 02:58:51
今天初步的完成了首页加载速度的优化和博客列表缓存。前者是为了让游客访问首页更舒服而不用等加载半天,后者是为了减少服务器和浏览器的请求响应次数来减轻彼此的负担。
经过上次的webpack的analyzer分析,发现即便是按需导入需要的模块,echarts的工具组件合起来依旧很大,约莫3M大小,整体占比高达50%,然而使用的地方仅仅是后台的数据统计部分用到一点,性价比极低,所以这次将echarts模块删除了,并且自己进行绘制图表,立马省了这空间。也蛮好看不是(/▽\)
这次给axios也加上了nprogress的组件来弥补请求加载到响应的空白时间(虽然,貌似,没起到作用?晚点研究吧)
就我网站的另外一个占用资源大的地方就是背景图片和字体文件了,一个字体文件约莫1M多!所以将这些资源搬运到了cdn上加速了。需要更改的链接地方都集中管理了,以后更改也很方便。
没错,之前博客页每次到一个分页都会发一次请求,获取当前页的博客列表,当然这样的及时性很高,但是,一个不可忽视的点就是博客的更新频率没有那么高,所以实时性需求也没有那么大。这里就将每次获取页面的列表数据存于vue store中,以后每次再次访问该分页,该页面都会直接返回存于store中的列表数据,这样就避免了无意义的重复请求与响应,此外通过这个,顺带解决了游客看玩一个博文返回后从第一页重头加载的尴尬局面。
import axios from 'axios'
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
// for blog
blogList: [], // [[page,data],[...]]
blogPage: 1,
blogTotalSize: 0,
blogPageSize: 7
},
getters: {
getBlogsByPage (state) {
let data = []
state.blogList.forEach(element => {
if (element[0] === state.blogPage) {
data = element[1]
}
})
return data
}
},
mutations: {
inserNewtBlogs (state, data) {
let exist = false
state.blogList.forEach((element) => {
if (element[0] === state.blogPage) {
exist = true
}
})
if (!exist) {
state.blogList.push(data)
}
},
changeBlogTotalSize (state, data) {
state.blogTotalSize = data
},
changeBlogPage (state, data) {
state.blogPage = data
}
},
actions: {
getBlogList (context) {
let exist = false
this.state.blogList.forEach((element) => {
if (element[0] === this.state.blogPage) {
exist = true
}
})
if (!exist) {
axios.post('/api/blog/page',
`pageNo=${this.state.blogPage}&pageSize=${this.state.blogPageSize}`).then(res => {
context.commit('inserNewtBlogs', [this.state.blogPage, res.data.data])
}).catch(err => err)
}
},
getBlogTotalSize (context) {
if (this.state.blogTotalSize === 0) {
axios.get('/api/blog/count').then(res => {
context.commit('changeBlogTotalSize', res.data.data)
}).catch(err => err)
}
}
}
})
通过这些捣鼓,首页不带cache加载速度终于<2s啦,带cache甚至可以1s以内迅速响应*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
又熬夜到三点了,摸了。