性能优化 - 优化项目打包体积,减少首屏加载速度

设置mode

如果你的环境变量用的是vuecli3自带的production,则不需要设置,因为本身是开启的,但是如果你自定义了上线的环境变量,比如prod,online等,则需要配置一下,配置之后体积会立马少一半哦~

configureWebpack: (config) => {
    config.mode = 'production'
}

开启GZIP

当然nginx也要做相应的配置哦,自行让公司的运维同学去百度吧,一堆一堆的~

npm install compression-webpack-plugin -D

const CompressionPlugin = require('compression-webpack-plugin')
configureWebpack: (config) => {
    plugins: [
      new CompressionPlugin({
        test: /\.js$|\.html$|\.css$|\.jpg$|\.jpeg$|\.png/, // 需要压缩的文件类型
        threshold: 10240, // 归档需要进行压缩的文件大小最小值,我这个是10K以上的进行压缩
        deleteOriginalAssets: false // 是否删除原文件
      })
    ]
}

开启之后,如何看是否开启成功了呢,打开网站,然后控制台,看看加载的资源响应体内Content-Encoding 是否为gzip,如果是则成功了,也可以设置一下很直观能看到这个属性值,如下图,右键之后进行框框内操作,最后它就出来了~
在这里插入图片描述

打包可视化插件 看各占体积大小

如果还觉得这样之后加载很慢,不防看看都是什么导致的体积大
npm run build --report 之后就能打开一个图,里面可以查看各个打包文件的体积了~

npm install webpack-bundle-analyzer -D
npm run build --report

chainWebpack: config => {
    if (process.env.npm_config_report) {
      config
        .plugin('webpack-bundle-analyzer')
        .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
        .end()
    }
}

按需加载

比如项目中引入了UI库,比如vant,只是用了部分的组件,所以不用全部引入

import Collapse from 'vant/lib/collapse'
import 'vant/lib/collapse/style'
Vue.use(Collapse)

比如项目中用了图表库,比如F2,只是用了柱状图,折线图之类的,也不用全部引入
下面是我自身项目中所用到的,如有用到的同学,可做参考哦~

// 引入核心包 Core
const F2 = require('@antv/f2/lib/core')
// 几何标记模块,用户绘制具体的图形
require('@antv/f2/lib/geom/line') // 折线图
require('@antv/f2/lib/geom/area') // 面积图
require('@antv/f2/lib/geom/interval') // 引入 interval 几何标记
// 坐标系
require('@antv/f2/lib/coord/polar') // 极坐标
// adjust 数据调整类型
require('@antv/f2/lib/geom/adjust/stack') // 只加载层叠类型
require('@antv/f2/lib/geom/adjust/symmetric') //
// Axis 坐标轴类型
require('@antv/f2/lib/component/axis/circle') // 弧长坐标轴(用于极坐标)
// Tooltip
const Tooltip = require('@antv/f2/lib/plugin/tooltip')
F2.Chart.plugins.register(Tooltip)
// Legend
const Legend = require('@antv/f2/lib/plugin/legend')
F2.Chart.plugins.register(Legend)
// intervalLabel
const intervalLabel = require('@antv/f2/lib/plugin/interval-label')
F2.Chart.plugins.register(intervalLabel)
// Animation
const Animation = require('@antv/f2/lib/animation/detail')
F2.Chart.plugins.register(Animation)
// Guide
require('@antv/f2/lib/component/guide/html') // 只加载 Guide.Html 组件
const Guide = require('@antv/f2/lib/plugin/guide') // 加载插件
F2.Chart.plugins.register(Guide)
export default F2

比如用到了moment,lodash都可以做按需加载
不过自身试过lodash的,好像不太好用,网上查了查也说是有坑,不知道是不是我自身问题,此处也贴出来代码吧,如果有用着还不错的,记得同步我方法~

npm install lodash-webpack-plugin -D

const LodashModuleReplacementPlugin = require('lodash-webpack-plugin')
chainWebpack: config => {
    // 按需加载lodash
    config.plugin("loadshReplace").use(new LodashModuleReplacementPlugin())
}

// babel.config.js
module.exports = {
  plugins: ['lodash']
}

压缩js代码,去掉注释,打印等

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
configureWebpack: (config) => {
    if (process.env.NODE_ENV === 'prod') {
      return {
        plugins: [
          new UglifyJsPlugin({
            uglifyOptions: {
              // 删除注释
              output:{
                comments:false
              },
              compress: {
                drop_debugger: true,
                drop_console: true
              }
            },
            sourceMap: false,
            parallel: true
          })
        ]
      }
   }
}

抽离css文件

这个呢,在vuecli3的项目中,用MiniCssExtractPlugin这个插件似乎是不太好用,官方提供了抽离方法,只需要设置extract: true即可
但是如果是分片打包,本身js就很多,在抽离出来好几个css文件,也说不出来到底是抽离出来好,还是放在js文件中比较好,自己取舍吧

css:{
    extract:true
}

其他没用到的

比如说cdn,但是项目中没用,也懒得改了,so亲们自己尝试吧
比如图片压缩等
比如尽可能要用字体文件哈
比如你们还有什么可以评论告诉我
毕竟我是个小菜鸟,哈哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了优化webpack打包vue项目,你可以考虑以下几个方面: 1. 使用代码分割:将代码拆分成多个小块,按需加载,减小初始加载的文件大小。可以使用webpack的SplitChunksPlugin插件来进行代码分割。 2. 使用懒加载:对于一些不常用或者较大的模块,可以使用懒加载的方式来延迟加载,减小初始加载的文件大小。可以通过vue-router的异步路由或者webpack的import函数来实现。 3. 压缩代码:使用webpack的UglifyJsPlugin插件来压缩代码,减小文件体积。 4. 使用缓存:通过设置webpack的output.filename和output.chunkFilename选项来生成带有hash的文件名,以便浏览器能够缓存文件,减少重复请求。 5. 图片优化:将图片进行压缩和转换为base64编码,以减小文件大小。可以使用url-loader或者file-loader插件来处理图片。 6. 清除无用代码:使用webpack的Tree Shaking特性去除未使用的代码,减少输出文件体积。 7. 配置合理的Devtool选项:在开发环境中使用sourcemap来方便调试代码,而在生产环境中使用cheap-source-map或者none等选项来减小构建时间和文件大小。 8. 优化打包时的性能:使用happypack插件来多线程处理webpack的loader和babel-loader,使用ParallelUglifyPlugin插件来并行压缩代码,提高构建速度。 以上是一些常见的webpack打包vue项目优化方法,你可以根据具体情况选择适合你项目优化策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值