当前位置: 首页 > article >正文

VUE3项目VITE打包优化

VUE3项目VITE打包优化

  • 代码加密
    • 依赖
    • 配置
    • 效果对比图
  • 自动导入
    • 依赖
    • 配置
  • 代码压缩
    • 依赖
    • 配置
    • 效果对比图
  • 图片压缩
    • 依赖
    • 配置
    • 效果对比图
  • 字体压缩
  • 总结与实践运用
    • 效果

代码加密

依赖

npm install -D vite-plugin-bundle-obfuscator

配置

import vitePluginBundleObfuscator from "vite-plugin-bundle-obfuscator";
import { defineConfig } from "vite";
// ...
export default defineConfig(() => {
  return {
    plugins: [
      // ...
      vitePluginBundleObfuscator({
        autoExcludeNodeModules: true,
        threadPool: true,
      }),
      // ...
    ],
  };
});

效果对比图

加密

自动导入

  • 通俗理解,就是用的才导入,不用的不导入,这样打包体积才会变小;

依赖

npm install -D unplugin-vue-components unplugin-auto-import

配置

  • 参考资料elementPlus
  • 可以把自动生成的auto-imports.d.tscomponents.d.ts文件,放入.gitignore文件中,不然提交。
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import { defineConfig } from "vite";
// ...
export default defineConfig(() => {
  return {
    plugins: [
      // ...
      AutoImport({
        resolvers: [ElementPlusResolver({ importStyle: "sass" })],
        imports: ["vue", "vue-router"],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
      // ...
    ],
  };
});

代码压缩

  • 这个是需要nginx配置的,就算前端配置了,nginx没有配置,也是没有用的。
  • 前端起到是避免nginx调用服务器CPU压缩代码,之后再传递,而是可以直接调取前端静态压缩文件

依赖

npm install -D vite-plugin-compression2

配置

  • 前端打包配置,使用的是gzip算法。
  • 后续尝试brotli压缩算法上线,这个nginx需要引入依赖,以及只支持https。
  • 已测如下图,与gzip对比,brotli算法压缩体检还可以多减少18.76%,但是没有上线。
    gzi与pbrotli对比
  • 前端vite配置
import { compression } from "vite-plugin-compression2";
import { defineConfig } from "vite";
// ...
export default defineConfig(() => {
  return {
    plugins: [
      // ...
      compression({
        // 可以加其他的后缀文件
        include: [/\.js$/, /\.html$/, /\.css$/, /\.ttf$/],
      }),
      // ...
    ],
  };
});
  • nginx配置
http {
	# ....
    gzip  on; # 开启gzip压缩
    
    gzip_static on; # 开启静态文件的gzip压缩,也就是从前端本地提取,而不是nginx调取cpu进行压缩,减小cpu压力。     
    
    gzip_min_length 256;# 设置压缩最小字节数
    
    gzip_comp_level 6; # 压缩级别,级别越大越好,但是越占用CPU资源,到了级别6后,很难再提高;
    
    gzip_types application/javascript text/html text/css image/jpeg image/gif image/png image/svg+xml image/x-icon font/ttf application/octet-stream; # 进行压缩的文件类型
    
    gzip_vary on; # 是否在http header中添加Vary: Accept-Encoding,建议开启
    
    gzip_disable "MSIE [1-6]\."; # 禁用IE 6 gzip 此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    
    gzip_http_version 1.0; # 设置gzip压缩针对的HTTP协议版本
    
    gzip_proxied any; # 设置启用压缩的代理服务器类型
    # 设置压缩所需要的缓冲区大小 使用默认值
    # gzip_buffers 32 4k;
    # ....
}

效果对比图

  • 打包体积下降39.57%,效果很明显
    压缩

图片压缩

  • 最开始使用的插件是vite-plugin-imagemin,但是在本地可以运行,但是到了服务器上,因为sharp依赖c++库报错,要升级。后面更换了插件。
  • 该插件遇的坑是,服务器是缺少c++命令,百度搜索一下安装即可。然后要记得在重新安装依赖之前,先将之前报错的产生的node_modules文件夹删除掉。

依赖

  • 可以先尝试直接按照依赖,如果不行,再加后面一串国内阿里云镜像依赖包。
npm install -D vite-plugin-minipic --sharp_binary_host="https://registry.npmmirror.com/-/binary/sharp" --sharp_libvips_binary_host="https://registry.npmmirror.com/-/binary/sharp-libvips"

配置

import miniPic from "vite-plugin-minipic";
import { defineConfig } from "vite";
// ...
export default defineConfig(() => {
  return {
    plugins: [
      // ...
      miniPic(),
      // ...
    ],
  };
});

效果对比图

  • 图片体积整体下降72.05%,效果很明显
    效果

字体压缩

  • 实现前端.ttf字体包的压缩
  • 压缩率高达90%左右。

总结与实践运用

  • 我相信认真看完,还是有收获的,我自己全流程亲测,断断续续花费了我半个月时间,从设想到一步一步拆解实现,然后在生产环境启用,很有收获。
  • 但是我也相信你们也有疑惑,最后一个字体压缩怎么在生成环境运用?
  • 我的思路是编写shell脚本:(我的思路只是参考,你也许可以想到更好的方案)
    • 回滚,去除本地修改部分;
    • 通过git获取远端git仓库的代码;
    • 通过python调用.py压缩字体文件,将字体进行压缩;
    • 通过.env环境打包成前端包;
    • 将dist目录移动到nginx代理目录下即可。

效果

  • 文件压缩率高达90%左右 响应速率提升高达85%左右
  • 下面图片是一个测试环境、一个是正式环境
    优化

http://www.kler.cn/a/600898.html

相关文章:

  • leetcode3.无重复字符的最长字串
  • G 2024hubei province 学习到的内容
  • 各类神经网络学习:(四)RNN 循环神经网络(下集),pytorch 版的 RNN 代码编写
  • AI+数字孪生:能碳管理中心的智能预测与动态优化
  • Python Django系列—多数据库
  • 干货分享|DeepSeek技术革命、算力范式重构与场景落地洞察
  • JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
  • 常用的几种思维方式
  • 2024年MathorCup数学建模C题物流网络分拣中心货量预测及人员排班解题全过程文档加程序
  • Android 12.0 WiFi连接默认设置静态IP地址功能实现
  • 【免费】2007-2019年各省地方财政非税收入数据
  • 【从零实现Json-Rpc框架】- 第三方库介绍 - Muduo篇
  • python每日十题(9)
  • 怎么用 DeepSeek 替你做外贸
  • C++设计模式-装饰模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 【C语言】信号
  • Linux防火墙基础部分Firewalld防火墙(小白入门级别)
  • Linux 配置时间服务器
  • 2025 JMeter平替的五款工具
  • 高校校园交友微信小程序的设计与实现【lw+源码+部署+讲解】