vue实现延迟加载
Vue 实现延迟加载的方法
使用动态导入(Dynamic Import)实现组件懒加载
动态导入是 ECMAScript 的一个特性,Vue 通过 defineAsyncComponent 支持这种方式。这种方法会在组件需要渲染时才加载对应的代码。
const AsyncComponent = defineAsyncComponent(() =>
import('./components/AsyncComponent.vue')
)
在路由配置中使用懒加载可以显著提升应用初始加载速度:
const routes = [
{
path: '/about',
component: () => import('./views/About.vue')
}
]
图片懒加载实现
对于图片资源,可以使用 Intersection Observer API 或现有库实现懒加载:
// 使用 v-lazy 指令(需要安装 vue-lazyload)
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload, {
preLoad: 1.3,
error: 'dist/error.png',
loading: 'dist/loading.gif',
attempt: 1
})
// 模板中使用
<img v-lazy="img.src">
数据懒加载实现
对于长列表或分页数据,可以监听滚动事件实现数据懒加载:
methods: {
handleScroll() {
const bottomOfWindow =
document.documentElement.scrollTop + window.innerHeight ===
document.documentElement.offsetHeight
if (bottomOfWindow) {
this.loadMoreData()
}
}
},
mounted() {
window.addEventListener('scroll', this.handleScroll)
},
beforeDestroy() {
window.removeEventListener('scroll', this.handleScroll)
}
使用 Suspense 处理异步组件状态
Vue 3 的 Suspense 组件可以更好地处理异步组件加载状态:
<template>
<Suspense>
<template #default>
<AsyncComponent />
</template>
<template #fallback>
<div>Loading...</div>
</template>
</Suspense>
</template>
预加载策略
对于关键资源,可以在空闲时预加载:

// 使用 requestIdleCallback 预加载非关键资源
requestIdleCallback(() => {
import('./components/NonCriticalComponent.vue')
})
这些方法可以单独使用,也可以组合使用,根据应用的具体需求选择最合适的延迟加载策略。实现时需要注意错误处理和加载状态展示,以提供更好的用户体验。






