Vue首屏加载过慢的优化方法

 更新时间:2025年01月07日 10:15:08   作者:东离与糖宝  
Vue 应用在首屏加载时速度过慢,通常与以下问题有关:打包文件过大、网络请求过多、资源加载过慢,针对这些问题,本文给大家介绍了Vue首屏加载过慢的优化方法,需要的朋友可以参考下

Vue 首屏加载过慢的优化方法

Vue 应用在首屏加载时速度过慢,通常与以下问题有关:打包文件过大、网络请求过多、资源加载过慢。针对这些问题,可以从以下几个方面进行优化:

1. 减小项目打包体积

打包体积是首屏加载慢的核心原因之一。优化方法包括:

1.1 代码分割 (Code Splitting)

通过 异步加载 和 路由懒加载,只在需要时加载组件,减小首屏包体积。

  • 路由懒加载:将路由对应的组件进行异步加载。
const Home = () => import('@/views/Home.vue'); // 异步加载
const About = () => import('@/views/About.vue');
export default new VueRouter({
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About }
  ]
});
  • 动态导入组件:使用 import() 进行按需加载。

1.2 提取公共库和依赖

将第三方库 (如 VueElement-UI) 和业务代码分开打包,利用 CDN 加速加载。

  • 使用 CDN 引入第三方库:减少打包体积。
    在 index.html 中通过 CDN 引入第三方库:
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
  • Webpack 配置 externals
module.exports = {
  externals: {
    vue: 'Vue', // 使用外部 Vue 而不打包
    axios: 'axios'
  }
};

1.3 Tree Shaking

确保无用代码被移除,减小包体积。

  • 开启生产模式打包:使用 mode: 'production',开启 Tree Shaking 和压缩。
  • 按需引入 UI 组件库
    使用按需加载代替全局引入:
import { Button, Select } from 'element-ui';
Vue.component(Button.name, Button);
Vue.component(Select.name, Select);

2. 优化资源加载

2.1 图片优化

  • 懒加载:使用 vue-lazyload 只在图片进入视口时加载。

import VueLazyload from 'vue-lazyload';
Vue.use(VueLazyload, { loading: 'loading.gif' });
  • 图片压缩:将大图压缩为更小的格式(如 WebP)。

  • 使用合适的分辨率:移动端适配时,使用低分辨率图片。

2.2 减少 HTTP 请求

  • 合并小文件:使用雪碧图 (Sprite) 或 Base64 编码小图标,减少 HTTP 请求。
  • 启用 Gzip 压缩:在服务器端配置 Gzip:
    • Nginx 示例配置
gzip on;
gzip_types text/plain application/javascript text/css;

2.3 使用缓存

  • 开启浏览器缓存:对静态资源 (CSS、JS、图片等) 进行长期缓存。

location ~* \.(js|css|png|jpg|jpeg|gif|svg)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}
  • 使用 Service Worker:实现本地缓存,提高加载速度。

3. 优化首屏渲染

3.1 SSR (服务端渲染)

服务端渲染可以大幅加快首屏加载速度,解决首屏白屏问题。

  • 使用 Nuxt.js 轻松实现服务端渲染。

3.2 预渲染 (Pre-rendering)

对于纯静态页面,可以使用预渲染插件将页面提前渲染成 HTML 文件。

  • 使用 prerender-spa-plugin
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const path = require('path');
module.exports = {
  plugins: [
    new PrerenderSPAPlugin({
      staticDir: path.join(__dirname, 'dist'),
      routes: [ '/', '/about', '/contact' ]
    })
  ]
};

3.3 骨架屏

在首屏渲染前显示骨架屏,提升用户体验。

  • 使用插件如 vue-skeleton-webpack-plugin

4. 提升网络性能

4.1 使用 HTTP/2

开启 HTTP/2 协议,支持多路复用,加快资源加载速度。

4.2 减少首屏请求

  • 合理设置 async 和 defer 属性,优化 JS 加载顺序。
<script src="app.js" defer></script>

4.3 预加载资源

利用 rel="preload" 提前加载关键资源:

<link rel="preload" href="main.css" rel="external nofollow"  as="style">

5. 分析和监控性能瓶颈

5.1 使用工具分析

  • Chrome DevTools → Performance 面板分析加载时间和瓶颈。
  • 使用 Lighthouse 工具进行性能评估。

5.2 持续监控

使用性能监控平台(如 Sentry 或 Google Analytics)监控页面性能。

到此这篇关于Vue首屏加载过慢的优化方法的文章就介绍到这了,更多相关Vue首屏加载过慢内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VUE递归树形实现多级列表

    VUE递归树形实现多级列表

    这篇文章主要为大家详细介绍了VUE递归树形实现多级列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • vue打包的时候自动将px转成rem的操作方法

    vue打包的时候自动将px转成rem的操作方法

    这篇文章主要介绍了vue打包的时候自动将px转成rem的操作方法,需要的朋友可以参考下
    2018-06-06
  • vant自定义引入iconfont图标及字体的方法步骤

    vant自定义引入iconfont图标及字体的方法步骤

    因为vantUI给的图标非常少,为了满足自己的需求,就应该找到一种方法来向vant添加自己自定义的图标,对于自定义图标我第一时间想到的就是阿里的iconfont矢量图库,这篇文章主要给大家介绍了关于vant自定义引入iconfont图标及字体的方法步骤,需要的朋友可以参考下
    2023-09-09
  • Vite版本更新检查实现页面自动刷新的解决思路

    Vite版本更新检查实现页面自动刷新的解决思路

    这篇文章主要给大家介绍了关于Vite版本更新检查实现页面自动刷新的解决思路,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • 详解Vue SPA项目优化小记

    详解Vue SPA项目优化小记

    这篇文章主要介绍了详解Vue SPA项目优化小记,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 关于vue 项目中浏览器跨域的配置问题

    关于vue 项目中浏览器跨域的配置问题

    这篇文章主要介绍了vue 项目中浏览器跨域的配置问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • vue轮询请求解决方案的完整实例

    vue轮询请求解决方案的完整实例

    项目开发中需要做一个轮询,所以将实现的过程记录了一下,下面这篇文章主要给大家介绍了关于vue轮询解决方案的相关资料,需要的朋友可以参考下
    2021-07-07
  • element的el-table自定义最后一行的实现代码

    element的el-table自定义最后一行的实现代码

    最后一行要显示一些其他结果,用的是element  ui 自带的数据总计的属性;返回一个数组,会按下标进行展示,这篇文章主要介绍了element的el-table自定义最后一行的实现代码,需要的朋友可以参考下
    2024-03-03
  • vue实现个人信息查看和密码修改功能

    vue实现个人信息查看和密码修改功能

    本文通过实例代码给大家介绍了vue实现个人信息查看和密码修改功能,文中给大家补充介绍了vue实现密码显示隐藏切换功能,非常不错,具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2018-05-05
  • el-form-item中表单项label和表单项内容换行实现方法

    el-form-item中表单项label和表单项内容换行实现方法

    这篇文章主要给大家介绍了el-form-item中表单项label和表单项内容换行实现的相关资料,每个表单el-form由多个表单域el-form-item组成,需要的朋友可以参考下
    2023-09-09

最新评论