Vue3+Vite4項(xiàng)目進(jìn)行性能優(yōu)化的配置方案
一、基礎(chǔ)性能優(yōu)化配置(vite.config.ts)
1. Gzip 壓縮加速
import viteCompression from 'vite-plugin-compression'; // plugins 數(shù)組中添加 viteCompression({ verbose: true, // 顯示壓縮日志 threshold: 10240, // 超過(guò)10kb的文件才壓縮 algorithm: 'gzip', // 算法可選brotliCompress ext: '.gz', deleteOriginFile: false // 根據(jù)服務(wù)器配置決定是否刪除源文件 })
作用:預(yù)生成.gz文件,Nginx等服務(wù)器直接發(fā)送壓縮包
業(yè)務(wù)場(chǎng)景:
- 高并發(fā)場(chǎng)景建議開(kāi)啟(需服務(wù)器配合)
- 靜態(tài)資源托管CDN時(shí)建議刪除源文件(
deleteOriginFile: true
)
2. 資源壓縮優(yōu)化
import { viteStaticCopy } from 'vite-plugin-static-copy'; // 圖片壓縮(需安裝 vite-plugin-imagemin) import viteImagemin from 'vite-plugin-imagemin'; export default { plugins: [ viteImagemin({ gifsicle: { optimizationLevel: 7 }, optipng: { optimizationLevel: 7 }, mozjpeg: { quality: 65 }, pngquant: { quality: [0.65, 0.9] }, svgo: { plugins: [{ name: 'removeViewBox' }, { name: 'cleanupIDs' }] } }), // 靜態(tài)資源復(fù)制插件 viteStaticCopy({ targets: [ { src: 'public/static-assets', dest: 'assets' } ] }) ] }
作用:
- 圖片壓縮:降低圖片體積(適合中大型圖片資源項(xiàng)目)
- 靜態(tài)資源分類:通過(guò)
viteStaticCopy
分離高頻更新資源
業(yè)務(wù)場(chǎng)景:
- 圖片為主的展示型網(wǎng)站必須開(kāi)啟
- 管理后臺(tái)類項(xiàng)目可酌情降低壓縮率(
quality: 75
)
3. 分包策略
export default { build: { rollupOptions: { output: { manualChunks: (id) => { if (id.includes('node_modules')) { if (id.includes('vue')) return 'vue-core'; if (id.includes('lodash')) return 'lodash'; return 'vendor'; } if (id.includes('src/components')) return 'components'; }, chunkFileNames: 'js/[name]-[hash].js' } } } }
分包規(guī)則:
vue-core
:Vue核心庫(kù)單獨(dú)分包vendor
:第三方依賴包components
:業(yè)務(wù)組件獨(dú)立分包
業(yè)務(wù)場(chǎng)景:
- 多入口應(yīng)用:按路由入口分包
- 組件庫(kù)項(xiàng)目:按功能模塊分包
4. 按需加載
// 路由配置示例 const routes = [ { path: '/dashboard', component: () => import(/* webpackChunkName: "dashboard" */ '@/views/Dashboard.vue') } ]
實(shí)現(xiàn)方式:
路由級(jí):動(dòng)態(tài)import()
語(yǔ)法
組件級(jí):defineAsyncComponent
UI庫(kù)按需加載(以Element Plus為例):
import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' Components({ resolvers: [ElementPlusResolver()], dts: true // 生成類型聲明文件 })
5. 熱更新配置
export default { server: { hmr: { overlay: true, // 顯示錯(cuò)誤覆蓋層 protocol: 'ws', host: 'localhost', port: 3000 }, watch: { usePolling: true // Docker環(huán)境需要開(kāi)啟 } } }
調(diào)試技巧:
- 開(kāi)發(fā)環(huán)境禁用緩存:
server.headers
設(shè)置Cache-Control: no-store
- 跨設(shè)備開(kāi)發(fā):設(shè)置
host: '0.0.0.0'
6. 路徑別名配置
import path from 'path'; export default { resolve: { alias: { '@': path.resolve(__dirname, './src'), '#': path.resolve(__dirname, './types') } } }
配套設(shè)置:
// tsconfig.json { "compilerOptions": { "paths": { "@/*": ["./src/*"], "#/*": ["./types/*"] } } }
7. Sourcemap 策略
export default { build: { sourcemap: process.env.NODE_ENV === 'production' ? 'hidden' : true } }
模式說(shuō)明:
- 開(kāi)發(fā)環(huán)境:完整sourcemap
- 生產(chǎn)環(huán)境:
hidden-source-map
(僅生成.map文件不上傳) - 錯(cuò)誤監(jiān)控:接入Sentry時(shí)需開(kāi)啟sourcemap上傳
二、進(jìn)階優(yōu)化方案
1. CDN 加速
import { createHtmlPlugin } from 'vite-plugin-html'; export default { plugins: [ createHtmlPlugin({ inject: { data: { cdnVue: '<script src="https://cdn.jsdelivr.net/npm/vue@3"></script>' } } }) ], build: { rollupOptions: { external: ['vue', 'vue-router'], output: { globals: { vue: 'Vue', 'vue-router': 'VueRouter' } } } } }
2. 預(yù)加載優(yōu)化
// vite.config.ts export default { build: { rollupOptions: { output: { manualChunks: { // ...其他配置 }, assetFileNames: 'assets/[ext]/[name]-[hash][extname]' } } } } // index.html 添加預(yù)加載 <link rel="preload" href="/assets/fonts/iconfont.woff2" rel="external nofollow" as="font" type="font/woff2" crossorigin>
三、業(yè)務(wù)場(chǎng)景配置策略
場(chǎng)景1:高并發(fā)門戶網(wǎng)站
配置重點(diǎn):
1. 開(kāi)啟Gzip + Brotli雙重壓縮
2. 所有靜態(tài)資源上傳CDN
3. 使用HTTP2服務(wù)器推送
4. 配置強(qiáng)緩存策略(Cache-Control: public, max-age=31536000)
示例配置:
build: { assetsInlineLimit: 4096, // 4kb以下資源轉(zhuǎn)base64 }
場(chǎng)景2:后臺(tái)管理系統(tǒng)
配置重點(diǎn):
1. 按功能模塊分包
2. 保留詳細(xì)sourcemap便于調(diào)試
3. 開(kāi)發(fā)環(huán)境優(yōu)化HMR速度
示例配置:
server: { watch: { ignored: ['!**/node_modules/your-package/**'] // 忽略無(wú)關(guān)模塊監(jiān)聽(tīng) } }
場(chǎng)景3:移動(dòng)端H5應(yīng)用
配置重點(diǎn):
1. 首屏資源內(nèi)聯(lián)(critical CSS)
2. 圖片格式優(yōu)先使用WebP
3. 開(kāi)啟SSR或預(yù)渲染
示例配置:
css: { postcss: { plugins: [ require('postcss-critical-css')({ outputPath: 'critical' }) ] } }
四、調(diào)試與分析工具
打包分析:
npm install rollup-plugin-visualizer -D // vite.config.ts import { visualizer } from 'rollup-plugin-visualizer'; plugins: [visualizer({ open: true })]
性能檢測(cè):
// main.ts import { performance } from 'perf_hooks'; if (import.meta.env.DEV) { performance.mark('app-start'); }
五、注意事項(xiàng)
壓縮兼容性:
- 確保服務(wù)器正確配置
Content-Encoding
響應(yīng)頭 - 舊版瀏覽器需檢測(cè)是否支持Brotli
緩存策略:
- 修改文件名哈希規(guī)則(
build.rollupOptions.output.[assetFileNames|entryFileNames]
) - 使用
manifest.json
管理版本號(hào)
安全優(yōu)化:
- 生產(chǎn)環(huán)境禁用sourcemap
- 設(shè)置
build.minify: 'terser'
并配置混淆參數(shù)
到此這篇關(guān)于Vue3+Vite4項(xiàng)目進(jìn)行性能優(yōu)化的配置方案的文章就介紹到這了,更多相關(guān)Vue3 Vite4性能優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vite vue3 路由配置@找不到文件的問(wèn)題及解決
在Vite項(xiàng)目中配置路由時(shí),可能會(huì)遇到文件路徑錯(cuò)誤導(dǎo)致的加載失敗問(wèn)題,常見(jiàn)的解決辦法包括安裝路徑處理插件、正確設(shè)置vite.config.js中的路徑別名以及重啟項(xiàng)目,通過(guò)正確配置,可以確保路由正確加載對(duì)應(yīng)的界面文件,避免路徑錯(cuò)誤導(dǎo)致的問(wèn)題2024-10-10Vue+Node.js+WebSocket實(shí)現(xiàn)即時(shí)通訊
本文主要介紹了Vue+Node.js+WebSocket實(shí)現(xiàn)即時(shí)通訊,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05vue watch深度監(jiān)聽(tīng)對(duì)象實(shí)現(xiàn)數(shù)據(jù)聯(lián)動(dòng)效果
這篇文章主要介紹了vue watch深度監(jiān)聽(tīng)對(duì)象實(shí)現(xiàn)數(shù)據(jù)聯(lián)動(dòng)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08elementPlus組件之表格編輯并校驗(yàn)功能實(shí)現(xiàn)
本文詳細(xì)介紹了如何使用Element Plus組件實(shí)現(xiàn)表格的單條數(shù)據(jù)新增、編輯、刪除操作,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),代碼簡(jiǎn)單易懂,感興趣的朋友跟隨小編一起看看吧2024-12-12vue3使用xgPalyer實(shí)現(xiàn)截圖功能的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何在vue3中使用xgPalyer截圖功能,以及自定義插件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02Vue編寫可顯示周和月模式的日歷 Vue自定義日歷內(nèi)容的顯示
這篇文章主要為大家詳細(xì)介紹了Vue編寫可顯示周和月模式的日歷,Vue自定義日歷內(nèi)容的顯示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Vue源碼學(xué)習(xí)之初始化模塊init.js解析
本篇文章主要介紹了Vue源碼學(xué)習(xí)之初始化模塊init.js解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11