vue项目使用webpack进行打包优化

340 阅读2分钟

【前言】

最近正在开发一个项目,业务开发阶段基本告一段落。空闲之余,随手点了点环境,发现....额...首屏加载..有点慢啊,点开Network查看了一下,Load:7.98s。看到这个时间,嗯...,有优化的空间,趁此机会,赶紧动手。

【项目介绍】

组件框架:vue3(vue/cli@4.5.15)

UI框架:Naive UI

打包工具: Webpack4

【代码体积优化】

插件:compression-webpack-plugin

安装方式:

yarn安装

yarn add -D compression-webpack-plugin

npm安装

npm i -D compression-webpack-plugin

官方文档介绍:compression-webpack-plugin是提供带 Content-Encoding 编码的压缩版的资源。

顾名思义,它是用来压缩代码的,在打包目录中,生成一份文件的gz压缩文件,在Nginx作为反向代理时,启用gzip压缩,所以在nginx.conf中需要增加相关配置,避免nginx动态压缩给cpu造成更多压力。

以下为从官网文档上摘录的compression-webpack-plugin配置参数:

image.png 以下为Nginx关于开启gzip配置:

image.png 在vue.config.js中配置如下:

new CompressionWebpackPlugin({
        threshold: 0,
        minRatio: 0.6,
        test: /\.(css|js)/i,
        algorithm: 'gzip',
      }),

【清除console】

在项目中有使用websocket,如果在处理函数中添加了console,这可能会造成页面卡顿,但在开发过程中,有时需要观察打印数据进行调试,为了不对生产环境造成影响或增加数据暴露的风险,将其删除是很有必要的。

首先考虑的插件是uglifyjs-webpack-plugin,当然,可以清除掉console打印,但是在测试过程中,发现使用mapbox的页面有报错,查询资料后,得到的解释是新版本的插件已不支持es6语法。选择降低版本,导致引入Naive UI中的Menu组件样式发生变化,因此选择了第二种方案--terser-webpack-plugin。

这个原因无法准确定位,希望大佬可以在评论区帮忙分析下原因。

插件:terser-webpack-plugin@4.2.3

安装方式:

yarn安装:

yarn add terser-webpack-plugin --save-dev

npm安装:

npm i terser-webpack-plugin --save-dev

安装注意事项: 如果项目中使用的webpack版本是v4,那么插件的版本也必须是v4版本,否则会有问题。

参数说明:官方文档请点击

image.png 在vue.config.js中的配置:

      new TerserPlugin({
        terserOptions: {
          ecma: undefined,
          parse: {},
          compress: {
            drop_console: true,
            drop_debugger: true,
            pure_funcs: ['console.log'],
          },
          ie8: false,
        },
      }),

【结束语】

在项目中,性能优化是尤其重要的一环,此次优化仅仅是针对打包体积,代码大小方面进行的优化,在代码层面,组件引入可以做懒加载处理,这样webpack在打包时,会从 chunk 中移除模块,只有在执行的时候才会引入;如果是ToC项目,使用cdn就近分发静态资源也是优化的一种方式;webpack同样可以使用代码分包的方式处理。

最后,编程不易,且编且珍惜,能够帮助各位的话,请点个赞吧~