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.mzph.cn/bicheng/74862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文章记单词 | 第14篇(六级)

一,单词释义 affection:n. 喜爱,钟爱;爱慕之情;感情stream:n. 小河,溪流;一连串,源源不断;水流,气流;vi. 流,流动&#x…

欧几里得距离(Euclidean Distance)公式

欧几里得距离公式 欧几里得距离(Euclidean Distance)是计算两点之间直线距离的一种方法。它是最常见的距离度量方式之一,广泛应用于数学、物理、机器学习、计算机视觉等领域。 公式定义 1. 二维空间 在二维平面上,假设有两个点…

机器学习——LightGBM

LightGBM(light gradient boosting machine,轻量梯度提升机)是对XGBoost进行改进的模型版本,其三者之间的演变关系为:GBDT-》XGBoost-》LightGBM,依次对性能进行优化,尽管XGBoost已经很高效了,但是仍然有缺…

内网服务器无法通过公网地址访问映射到公网的内网服务

内网服务器无法通过公网地址访问映射到公网的内网服务 问题现象问题原因解决方法总结 前几天遇到一个网络问题,在这里做下记录,希望能帮助到有相同问题的朋友。 问题现象 网络拓扑如上所示,服务器1和服务器2在同一内网,网段均为1…

python每日十题(13)

一般把计算机完成一条指令所花费的时间称为一个指令周期。指令周期越短,指令执行就越快。本题答案为D选项。 顺序程序具有顺序性、封闭性和可再现性的特点,使得程序设计者能够控制程序执行的过程(包括执行顺序、执行时间),对程序执…

Python 装饰器(Decorators)

什么是装饰器? 装饰器(Decorator)本质上是一个 修改其他函数功能的函数。它的核心思想是:不修改原函数代码,动态添加新功能。比如: 记录函数执行时间 检查用户权限 缓存计算结果 自动重试失败操作 理解…

uWebSockets开发入门

一、常用C++ WebSocket开源库 一些常用的 C++ WebSocket 开源库,它们支持 WebSocket 协议的实现,适用于客户端或服务器端开发。 1. Boost.Beast (推荐) 特点:基于 Boost.Asio 的高性能库,支持 HTTP/WebSocket,属于 Boost 官方库的一部分,稳定且跨平台。 适用场景:需要高…

多智能体功能分化的核心优势是什么:提升效率,查漏补缺

多智能体功能分化的核心优势是什么:提升效率,查漏补缺 在于通过分工协作提升整体效率、灵活性和鲁棒性。 1. 提升效率与专业性 原理:单一智能体无需处理全流程,通过专业化分工减少冗余计算和决策延迟。 示例: 自动驾驶系统: 感知智能体:专门处理摄像头、激光雷达等传…

项目复盘:websocket不受跨域限制的原理

主要还是因为: 1、WebSocket 是独立于 HTTP 的应用层协议,通过 HTTP 建立连接后,完全脱离 HTTP 语义约束。这意味着 不受 HTTP 同源策略限制 不需要预检请求 不依赖 CORS 头机制 2、建立连接时的握手请求仍使用 HTTP 格式,但…

COMPASS:通过残差强化学习和技能合成实现跨具身移动策略

25年2月来自 Nvidia、UC Berkeley 和 UT Austin 的论文“COMPASS: Cross-embOdiment Mobility Policy via ResiduAl RL and Skill Synthesis”。 随着机器人越来越多地部署在不同的应用领域,可泛化的跨具身移动策略变得越来越重要。虽然经典的移动栈已被证明在特定…

无人机,雷达定点飞行时,位置发散,位置很飘,原因分析

参考: 无人车传感器 IMU与GPS数据融合进行定位机制_gps imu 组合定位原始数-CSDN博客 我的无人机使用雷达定位,位置模式很飘 雷达的更新频率也是10HZ, 而px飞控的频率是100HZ,没有对两者之间的频率差异做出处理 所以才导致无人…

学习threejs,使用Sprite精灵、SpriteMaterial精灵材质

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Sprite1.1.1 ☘️代码…

外星人入侵(python设计小游戏)

这个游戏简而言之就是操作一个飞机对前方的飞船进行射击,和一款很久之前的游戏很像,这里是超级低配版那个游戏,先来看看效果图: 由于设计的是全屏的,所以电脑不能截图。。。。 下面的就是你操控的飞船,上面…

什么是CMS?常用CMS有哪些?

一、内容管理系统(Content Management System)‌ ‌什么是CMS‌:位于 Web 前端(服务器)和后端办公系统之间的软件系统,用于内容创建、编辑、审批和发布。支持文本、图片、视频、数据库等各类数字内容的管理…

Go 语言规范学习(3)

文章目录 Properties of types and valuesRepresentation of valuesUnderlying types【底层类型】Core types【核心类型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…

在 Ubuntu 上安装 Docker 的完整指南

1. 卸载旧版本(如有) 在安装新版本前,建议先卸载旧版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安装依赖包 更新软件包索引并安装必要的依赖: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…

turtle的九个使用

一 import turtle as t color [red,green,blue,orange,pink] for i in range(len(color)):t.penup()t.goto(-20070*i,0)t.pendown()t.pencolor(color[i])t.circle(50, steps 5) t.done()二 #在____________上补充代码 #不要修改其他代码import random as r import turtle a…

23种设计模式-备忘录(Memento)设计模式

备忘录设计模式 🚩什么是备忘录设计模式?🚩备忘录设计模式的特点🚩备忘录设计模式的结构🚩备忘录设计模式的优缺点🚩备忘录设计模式的Java实现🚩代码总结🚩总结 🚩什么是…

利用虚拟化技术实现高级Hook

虚拟化技术为系统监控和Hook提供了更强大、更隐蔽的实现方式。以下是几种基于虚拟化的Hook技术实现方法: 1. 基于VT-x/AMD-V的硬件虚拟化Hook 基本原理 利用CPU的硬件虚拟化扩展(Intel VT-x/AMD-V)在Ring -1层级监控系统行为,实现无法被常规方法检测的…

某鱼、某宝 sign 签名算法分析记录

【作者主页】:小鱼神1024 【知识星球】:小鱼神的逆向编程圈 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 本文章中所有内容仅供学习交流使用,不用于其…