在Nuxt.js SSR项目中,数据流优化是提升首屏加载速度的关键环节。本文将分享一个实际项目的优化实践:通过自定义fetch和asyncData的执行策略来减少不必要的数据传输。
问题场景:在一个包含多个动态组件的仪表板页面中,每个组件都使用了asyncData获取独立的数据。当用户访问时,所有组件的API请求会同时发起,造成网络拥塞和资源浪费。
解决方案:
- 创建自定义数据获取策略,在路由守卫中预加载核心数据
- 使用
fetch替代部分asyncData,通过nuxtServerInit统一处理 - 实现数据缓存机制,避免重复请求
代码示例:
// store/index.js
export const actions = {
nuxtServerInit ({ commit }, { app }) {
// 预加载核心数据
return this.$axios.get('/api/core-data')
.then(res => {
commit('SET_CORE_DATA', res.data)
})
}
}
// pages/dashboard.vue
export default {
async fetch() {
// 只获取当前页面需要的数据
if (!this.$store.state.coreData) {
await this.$store.dispatch('nuxtServerInit')
}
}
}
通过上述优化,我们成功将首屏数据请求从原来的8个减少到3个,网络请求时间降低约60%。关键在于合理规划数据获取时机和范围。

讨论