vue 首页加载缓慢、白屏现象的原因与解决办法

本文分析了Vue项目首屏加载慢和白屏问题的原因,主要集中在app.js和vendor.js加载时间长。提出了解决方案,包括图片压缩、移除.map文件、使用CDN、路由懒加载和启用gzip静态资源压缩。详细介绍了每一步的具体操作,如修改webpack配置、引入CDN、调整vue-router和服务器配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue项目打包上线后,首次打开会发现加载很慢,出现白屏的问题,

一、问题原因

打开控制台查看文件加载情况,会发现app.js/vendor.js这两个文件加载时间较长

image

二、解决办法

1、图片压缩

使用webpack打包文件时,可以看到图片资源显示过大,使用工具进行压缩

image

2、去掉.map文件

webpack打包文件时,会看到有一些.map文件生成

image

  • 修改:
    找到config文件夹下的index.js文件,build里边的productionSourceMap值改为false即可

image

3、CDN外部加载

在项目开发中,会用到很多第三方库,如果可以按需引入,只需要引入自己需要的组件,减少所占空间,但是有些不能按需引入,则可以使用CDN外部加载

  • 在index.html中从CDN引入组件,去掉其他页面的组件import

image

  • 修改webpack.base.config.js,在externals中加入该组件,避免编译时找不到组件报错

image

4、vue路由懒加载
  • 方法一:
export default new Router({
  routes: [ {
      path: '/login',
      component: resolve=>require(["@/components/pages/signIn/signIn"],resolve),
    }]
});
  • 方法二:
export default new Router({
  routes: [ {
      path: '/login',
      component: ()=>import("@/components/pages/signIn/signIn"),
    }]
});
  • 方法三:webpack提供的require.ensure()

vue-router配置路由,使用webpack的require.ensure技术,也可以实现按需加载。
这种情况下,多个路由指定相同的chunkName,会合并打包成一个js文件。

路由index.js修改
{
  path: '/home',
  name: 'home',
  component: r => require.ensure([], () => r(require('@/components/home')), 'demo')
}, {
  path: '/index',
  name: 'Index',
  component: r => require.ensure([], () => r(require('@/components/index')), 'demo')
}

webpack.base.conf.js修改:

image

5、gzip静态资源压缩,这个需要结合服务器端的配置。

查阅资料发现很多人推荐使用gzip静态资源压缩,但是这个需要结合服务器的配置

1、打开config/index.js文件:

image

  • 这里安装时需要制定版本,要不然会报错
  • npm install --save-dev compression-webpack-plugin@1.1.12

2、然后打开/build/webpack.base.config.js文件,找到module.exports的module中的rules

image

  • 因为vue中一些小的静态资源文件是会打包成base64的文件存在css中的或者js中,这里就是控制需要转换的大小,这样减少了js的大小。

3、服务器端(下面以Nginx为例)

  • 打开配置文件,一般都会默认开启gzip的,但是gzip_static是没有开启的,所有需要加上 gzip_static on;

image

  • 如果没有开启gzip的话可以在手动在http{}里添加
http {
    gzip on;
    gzip_static on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types     text/plain application/javascript application/x-javascript         
    text/javascript text/css application/xml;
    gzip_vary on;
    gzip_proxied   expired no-cache no-store private auth;
    gzip_disable   "MSIE [1-6]\.";
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值