项目打包的优化--提高首屏加载的速度

本文介绍了如何从项目中移除preload和perfetch以优化首屏加载速度,使用terser-webpack-plugin清理console.log,启用compression-webpack-plugin进行gzip压缩,以及利用CDN引入资源库和压缩图片来减小包体积。
摘要由CSDN通过智能技术生成

项目的打包优化可以使项目启动速度和性能必要的清理数据,减少打包后的体积​

1.什么是preload?

preload是一种预加载机制,可以将一些资源提前请求,使得在用户需要的时候资源已经加载完成

2.什么是perfetch?

prefetch是一种预获取机制,会在浏览器空闲时提前加载一些资源,但有时候可能会导致加载了用户并不需要的资源

3.移除preload和perfetch

vue脚手架默认会开启 preload 与 prefetch,但项目很大时,这两个就会使首屏加载速度变慢。

首先来了解一下preload和perfetch

1、preload 与 prefetch 都是一种资源预加载机制;
2、preload 是预先加载资源,但并不执行,只有需要时才执行它;
3、prefetch 是意图预获取一些资源,以备下一个导航/页面使用;
4、preload 的优先级高于 prefetch。
配置前:
在这里插入图片描述

vue.config.js配置

  chainWebpack: config => {
    // 移除 preload(预载) 插件
    config.plugins.delete('preload')
    // 移除 prefetch(预取) 插件
    config.plugins.delete('prefetch')
  }

也可以根据需要进行配置

chainWebpack(config) {
    // it can improve the speed of the first screen, it is recommended to turn on preload

    // 开启preload,它可以提高首屏的加载速度
    // preload是一种预加载机制,可以将一些资源提前请求,使得在用户需要的时候资源已经加载完成
    config.plugin("preload").tap(() => [
      {
        rel: "preload", // 设置资源关系为preload
        fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/], // 设置黑名单,这些文件不会被preload
        include: "initial", // 只有初始化的资源会被preload
      },
    ]);

    // when there are many pages, it will cause too many meaningless requests
    // 删除prefetch插件,当页面过多时,prefetch可能会导致过多的无意义请求
    // prefetch是一种预获取机制,会在浏览器空闲时提前加载一些资源,但有时候可能会导致加载了用户并不需要的资源
    config.plugins.delete("prefetch");
}

配置后:
在这里插入图片描述

4.使用 terser-webpack-plugin 清除 console.log

开发过程中我们往往需要 console.log 进行调试,调试完后一般也会删除或注释掉,但难免有时会忘记,所以可以使用 terser-webpack-plugin 来清除 console.log。

首先需要下载依赖
npm install terser-webpack-plugin --save-dev
然后配置

chainWebpack: (config) => {
    config.optimization.minimizer('terser').tap((args) => {
        args[0].terserOptions.compress.drop_console = true
        return args
      })
}

5.使用 compression-webpack-plugin 开启 gzip 压缩

1、下载依赖
如果配置完成 有报错的话可以降低版本 默认的下载最新版本
npm install compression-webpack-plugin@6.1.1 -D
2、修改配置

configureWebpack: config=>{
        config.resolve={
          ...config.resolve,
          alias: {
            'vue$': 'vue/dist/vue.esm.js',
            '@': path.resolve(__dirname, './src'),
          }
        },
        config.externals= {
          'vue': 'Vue',
          'vue-router': 'VueRouter',
          'vuex': 'Vuex',
          'element-ui': 'ELEMENT',
        }
        config.plugins = [
          ...config.plugins,
          // 开启 gzip 压缩
          new CompressionPlugin({
            filename: '[path][base].gz',
            algorithm: 'gzip',
            test: /\.js$|\.css$|\.html$/,
            threshold: 10240,
            minRatio: 0.8
          })
        ]
      }

压缩前:
在这里插入图片描述

压缩后:
在这里插入图片描述

6.配置使用 CDN 方式引入资源库

有一些js的依赖我们可以不用打包到我们程序中,可以使用cdn的方式来链接js的依赖文件。
1、首先先看配置:在vue.config.js中设置不打包的文件

configureWebpack: {
      externals: {
        'vue': 'Vue',
        'vue-router': 'VueRouter',
        'vuex': 'Vuex',
        'element-ui': 'ELEMENT',
      }
    }

2、查看项目中文件依赖包的版本
在这里插入图片描述
3、在index.html中引入需要外联的资源

  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue-router@3.2.0/dist/vue-router.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.9/index.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuex@3.4.0/dist/vuex.min.js"></script>

4、没有开启cdn配置之前文件
在这里插入图片描述

5、配置完cdn的文件
在这里插入图片描述

7.压缩图片

1、下载依赖
cnpm install image-webpack-loader --save-dev
2、设置配置

  // webpack相关配置
  chainWebpack: (config) => {
    config.optimization.minimizer('terser').tap((args) => {
        args[0].terserOptions.compress.drop_console = true
        return args
      })
      //移除预载插件
    config.plugins.delete('preload')
    //移除预取插件
    config.plugins.delete('prefetch')
    //图片压缩
    config.module
      .rule('images')
      .use('imageWebpackLoader')
      .loader('image-webpack-loader')
      .options({
        disable: process.env.NODE_ENV === 'development', // 开发环境下禁止压缩
        gifsicle: {
          interlaced: false
        }
      })
  }

在线压缩图片

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue首次加载图片慢主要是因为以下几个原因: 1. 图片大小问题:首次加载图片慢可能是因为图片的大小较大,需要较长的时间来下载。解决方法是使用合适的图片压缩工具,将图片大小优化到合理的范围内,以减少加载时间。 2. 网络延迟问题:图片加载速度受到网络延迟的影响。如果服务器响应速度较慢或者网络不稳定,那么图片加载的时间会相应增加。建议使用CDN加速服务,将图片部署在离用户较近的节点上,以降低网络延迟。 3. 异步加载问题:在Vue中,图片默认是通过`<img>`标签进行加载的,而`<img>`标签的加载是同步阻塞的,即一旦遇到`<img>`标签,浏览器就会暂停其他资源的加载。可以考虑使用Vue提供的异步加载组件,例如`vue-lazyload`,将图片的加载放在异步任务中,从而减少首次加载时间。 4. 缓存问题:浏览器会对已加载过的图片进行缓存,下次再次访问相同的图片时,可以直接从缓存中读取,不需要再次下载。因此,如果首次加载图片慢,但之后再次加载同一张图片时速度较快,那么说明浏览器已经缓存了该图片。可以通过设置图片的缓存策略,让浏览器在首次加载时也进行缓存,从而减少首次加载时间。 综上所述,解决Vue首次加载图片慢的问题,可以通过合理压缩图片大小、使用CDN加速服务、异步加载图片组件以及设置合适的缓存策略等方法来优化加载速度
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值