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.pswp.cn/bicheng/74862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74862.shtml
英文地址,請注明出處:http://en.pswp.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后端開發等等 本文章中所有內容僅供學習交流使用,不用于其…