vue实现预加载
Vue 实现预加载的方法
使用路由懒加载结合 webpack 预加载
在 Vue Router 配置中使用 webpack 的魔法注释实现预加载,适合基于 vue-cli 或 webpack 构建的项目。
const routes = [
{
path: '/about',
component: () => import(/* webpackPrefetch: true */ './views/About.vue')
}
]
这种方法会在浏览器空闲时预加载指定路由资源,不影响当前页面性能。
组件级预加载
对于需要提前加载的组件,可以使用动态导入配合生命周期钩子。
export default {
data() {
return {
HeavyComponent: null
}
},
created() {
import('./components/HeavyComponent.vue').then(module => {
this.HeavyComponent = module.default
})
}
}
在模板中使用 <component :is="HeavyComponent" v-if="HeavyComponent" /> 渲染。
图片资源预加载
通过 JavaScript 创建 Image 对象实现图片预加载,适合画廊类应用。
function preloadImages(urls) {
urls.forEach(url => {
const img = new Image()
img.src = url
})
}
// 在 mounted 钩子中调用
preloadImages([
'/path/to/image1.jpg',
'/path/to/image2.png'
])
数据预加载
在导航守卫中提前获取数据,减少用户等待时间。
router.beforeResolve((to, from, next) => {
if (to.meta.requiresData) {
store.dispatch('fetchRequiredData').then(() => next())
} else {
next()
}
})
使用 vue-lazyload 插件
对于图片懒加载和预加载混合场景,可以配置 threshold 参数。
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload, {
preLoad: 1.3, // 预加载高度比例
attempt: 3 // 尝试加载次数
})
模板中使用 v-lazy 指令替换 src 属性:
<img v-lazy="imageUrl">
关键 CSS 内联
对于首屏关键样式,可以内联到 HTML 的 <head> 中,避免渲染阻塞。通过 webpack 的 style-loader 配置实现:
{
test: /\.css$/,
use: [
{
loader: 'style-loader',
options: {
insert: 'head',
injectType: 'singletonStyleTag'
}
},
'css-loader'
]
}
Service Worker 缓存
通过 Workbox 实现资源预缓存,适合 PWA 应用。
// vue.config.js
configureWebpack: {
plugins: [
new WorkboxPlugin.InjectManifest({
swSrc: './src/sw.js',
swDest: 'service-worker.js'
})
]
}
在 sw.js 中定义预缓存列表:

workbox.precaching.precacheAndRoute([
{url: '/index.html', revision: '123456'},
{url: '/css/app.css', revision: '654321'}
])
这些方法可以根据实际需求组合使用,平衡加载性能和用户体验。对于现代浏览器,prefetch 和 preload 等资源提示也能与 Vue 方案配合使用。






