使用Vue的时候第一次加载造成页面卡顿,该如何解决?
Vue 页面第一次加载卡顿,常见于项目体积大、组件复杂、资源加载慢的场景。这个问题一般出现在「首屏加载」阶段,主要优化目标是让用户尽早看到内容、尽早可操作。
一、从根本上减轻页面体积
1. 路由懒加载
// 路由配置中使用 import() 动态加载组件
const routes = [
{
path: '/about',
component: () => import('@/views/About.vue'),
},
]
优势:只有访问到该路由时才会加载对应组件,减少首页体积。
2. 组件按需引入
尤其是使用 Element UI、Ant Design Vue、ECharts 等组件库时:
// ✅ 使用 babel-plugin-component 或 vite-plugin-style-import
import { ElButton, ElInput } from 'element-ui'
Vue.component('ElButton', ElButton)
3. 使用 CDN 引入大依赖
例如 Vue、Vuex、Axios、ElementUI:
<!-- index.html -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
并配置 webpack 或 Vite 的 externals,避免这些依赖打包进主包。
二、优化资源加载方式
1. 开启 gzip 压缩
webpack:
// vue.config.js
const CompressionPlugin = require('compression-webpack-plugin')
module.exports = {
configureWebpack: {
plugins: [new CompressionPlugin()],
},
}
2. 图片资源懒加载
使用 vue-lazyload:
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload, {
loading: 'loading.gif', // 默认图
})
3. 骨架屏 + loading 动画
组件还没加载完前,显示 loading 或骨架屏;
Vue3 可以使用 <Suspense>;
Vue2 可以通过 v-if 控制加载状态。
三、首屏优化技巧
| 方法 | 说明 |
|---|---|
| ✅ 减少首页依赖的组件数量 | 首页尽量精简,只加载必要模块 |
| ✅ 首页不加载非首屏数据 | 使用懒加载、滚动加载策略 |
| ✅ 预加载关键资源 | <link rel="preload"> |
| ✅ 延迟加载 JS 模块 | webpack 配置 splitChunks 拆分打包模块 |
四、缓存 + 静态资源加速
| 方法 | 说明 |
|---|---|
| ✅ 浏览器缓存策略 | 静态资源加 hash,避免重复下载 |
| ✅ 使用 CDN | 加速 JS、CSS、字体、图片等 |
| ✅ Service Worker | 使用 PWA 技术缓存页面和 API 数据(进阶) |
五、工具分析首屏性能
使用 Chrome DevTools 的 Lighthouse:
-
分析 Largest Contentful Paint(LCP)
-
Time to Interactive(TTI)
-
找出阻塞资源(如大图、阻塞脚本)
总结:优化 checklist
| 优化点 | 是否做了? |
|---|---|
| 路由懒加载 | ✅ |
| 按需引入组件库 | ✅ |
| 图片资源懒加载 | ✅ |
| 首页尽量精简 | ✅ |
| 启用 gzip 压缩 | ✅ |
| CDN 加速 | ✅ |
| 加载动画 / 骨架屏 | ✅ |
浙公网安备 33010602011771号