国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vite打包性能優(yōu)化及填坑

這篇具有很好參考價(jià)值的文章主要介紹了Vite打包性能優(yōu)化及填坑。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近在使用?Vite4.0?構(gòu)建一個(gè)中型前端項(xiàng)目的過程中,遇到了一些坑,也做了一些項(xiàng)目在構(gòu)建生產(chǎn)環(huán)境時(shí)的優(yōu)化,在這里做一個(gè)記錄,以便后期查閱。(完整配置在后面)Vite打包性能優(yōu)化及填坑,性能優(yōu)化

上面是dist文件夾的截圖,里面的內(nèi)容已經(jīng)有30mb了,是時(shí)候該做點(diǎn)什么了。

分析

想要實(shí)現(xiàn)優(yōu)化,首先我得先知道,是什么占了這么大的空間。是圖片?是庫?還是其他靜態(tài)資源?

  1. 將文件分門別類,js,css這些資源目錄分別打包到對應(yīng)的文件夾下

    js
    復(fù)制代碼build:?{
    ????rollupOptions:?{
    ??????output:?{
    ????????chunkFileNames:?'js/[name]-[hash].js',?//?引入文件名的名稱
    ????????entryFileNames:?'js/[name]-[hash].js',?//?包的入口文件名稱
    ????????assetFileNames:?'[ext]/[name]-[hash].[ext]',?//?資源文件像?字體,圖片等
    ??????}
    ????}
    }
    
  2. 查看項(xiàng)目的依賴,找出大塊頭

rollup-plugin-visualizer是一個(gè)打包體積分析插件,對應(yīng)webpack中的webpack-bundle-analyzer。配置好后運(yùn)行構(gòu)建命令會(huì)生成一個(gè)stats.html

bash
復(fù)制代碼npm?i?rollup-plugin-visualizer?-D
js
復(fù)制代碼import?{?visualizer?}?from?'rollup-plugin-visualizer'
js
復(fù)制代碼plugins:?[
????visualizer({open:?true})
]
arduino
復(fù)制代碼npm?run?build?//?打包結(jié)束后會(huì)出現(xiàn)下圖

?Vite打包性能優(yōu)化及填坑,性能優(yōu)化

從體積能看到,這里已經(jīng)達(dá)到了7MB大小了,是時(shí)候該做點(diǎn)什么了。

優(yōu)化

拆分包

這里有一個(gè)自己的個(gè)人見解:如果不同模塊使用的插件基本相同那就盡可能打包在同一個(gè)文件中,減少http請求,如果不同模塊使用不同插件明顯,那就分成不同模塊打包。這是一個(gè)矛盾體。這里使用的是最小化拆分包。如果是前者可以直接選擇返回'vendor'。

scss
復(fù)制代碼rollupOptions: {
  output: {
    manualChunks(id) {
      if (id.includes("node_modules")) {
        // 讓每個(gè)插件都打包成獨(dú)立的文件
        return id .toString() .split("node_modules/")[1] .split("/")[0] .toString(); 
      }
    }
  }
}

去除debugger

bash
復(fù)制代碼npm?i?terser?-D
js
復(fù)制代碼terserOptions:?{
??compress:?{
????drop_console:?true,
????drop_debugger:?true
??}
}

CDN 加速

內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network,簡稱 CDN)就是讓用戶從最近的服務(wù)器請求資源,提升網(wǎng)絡(luò)請求的響應(yīng)速度。同時(shí)減少應(yīng)用打包出來的包體積,利用瀏覽器緩存,不會(huì)變動(dòng)的文件長期緩存。(不建議使用第三方cdn,這里做學(xué)習(xí)討論使用)

bash
復(fù)制代碼npm?i?rollup-plugin-external-globals?-D
npm?i?vite-plugin-html?-D
html
復(fù)制代碼<head>
????<%-?vuescript?%>
</head>
css
復(fù)制代碼import?{?createHtmlPlugin?}?from?'vite-plugin-html'

rollupOptions:?{
??//?告訴打包工具?在external配置的?都是外部依賴項(xiàng)??不需要打包
??external:?['vue'],
??plugins:?[
????externalGlobals({
??????//?"在項(xiàng)目中引入的變量名稱":"CDN包導(dǎo)出的名稱,一般在CDN包中都是可見的"
??????vue:?'Vue'
????})
??]
}

plugins:?[
????createHtmlPlugin({
??????minify:?true,
??????inject:?{
????????data:?{
??????????vuescript:?'<script?src="https://cdn.jsdelivr.net/npm/vue@3.2.37"></script>'
????????}
??????}
????})
]

Vite打包性能優(yōu)化及填坑,性能優(yōu)化?

按需導(dǎo)入

仔細(xì)看上面那張圖右下部分的模塊,不知道你會(huì)不會(huì)感覺到奇怪,明明是同一個(gè)包,為什么既出現(xiàn)了lodash又出現(xiàn)了lodash-es。其實(shí)lodash-es 是 lodash 的 es modules 版本 ,是著具備 ES6 模塊化的版本,體積小,而lodash是common.js版本。lodash最大的缺陷就是無法按需導(dǎo)入。

js
復(fù)制代碼import?_?from?'lodash-es';?//?你將會(huì)把整個(gè)lodash的庫引入到項(xiàng)目
import?{?cloneDeep?}?from?'lodash-es';?//?你將會(huì)把引入cloneDeep引入到項(xiàng)目

項(xiàng)目中用到lodash的地方也不多,經(jīng)過手動(dòng)修改一下,看現(xiàn)在已經(jīng)看不到lodash的庫了。

Vite打包性能優(yōu)化及填坑,性能優(yōu)化

文件壓縮

復(fù)制代碼npm?install?vite-plugin-compression?-D
js
復(fù)制代碼//?build.rollupOptions.plugins[]
viteCompression({
??verbose:?true,?//?是否在控制臺(tái)中輸出壓縮結(jié)果
??disable:?false,
??threshold:?10240,?//?如果體積大于閾值,將被壓縮,單位為b,體積過小時(shí)請不要壓縮,以免適得其反
??algorithm:?'gzip',?//?壓縮算法,可選['gzip','?brotliccompress?','deflate?','deflateRaw']
??ext:?'.gz',
??deleteOriginFile:?true?//?源文件壓縮后是否刪除(我為了看壓縮后的效果,先選擇了true)
})

當(dāng)請求靜態(tài)資源時(shí),服務(wù)端發(fā)現(xiàn)請求資源為gzip的格式時(shí),應(yīng)該設(shè)置響應(yīng)頭?content-encoding: gzip?。因?yàn)闉g覽器解壓也需要時(shí)間,所以代碼體積不是很大的話不建議使用?gzip?壓縮。

圖片壓縮

bash
復(fù)制代碼yarn?add?vite-plugin-imagemin?-D

or

bash
復(fù)制代碼npm?i?vite-plugin-imagemin?-D
js
復(fù)制代碼import?viteImagemin?from?'vite-plugin-imagemin'

plugin:?[
????viteImagemin({
??????gifsicle:?{
????????optimizationLevel:?7,
????????interlaced:?false
??????},
??????optipng:?{
????????optimizationLevel:?7
??????},
??????mozjpeg:?{
????????quality:?20
??????},
??????pngquant:?{
????????quality:?[0.8,?0.9],
????????speed:?4
??????},
??????svgo:?{
????????plugins:?[
??????????{
????????????name:?'removeViewBox'
??????????},
??????????{
????????????name:?'removeEmptyAttrs',
????????????active:?false
??????????}
????????]
??????}
????})
]

viteImagemin在國內(nèi)比較難安裝,容易出現(xiàn)報(bào)錯(cuò),可以嘗試一下下面幾種解決方案。

viteImagemin報(bào)錯(cuò)
  1. 使用 yarn 在 package.json 內(nèi)配置(推薦) "resolutions": { "bin-wrapper": "npm:bin-wrapper-china" }

  2. 使用 npm,在電腦 host 文件加上如下配置即可 199.232.4.133 raw.githubusercontent.com

  3. 使用 cnpm 安裝(不推薦)

填坑

坑1

在優(yōu)化過程中發(fā)現(xiàn)有什么rollupOption不生效,請檢查vite版本。上述配置在vite4.0版本生效,如需升級,請前往官方遷移文檔。

坑2

Uncaught TypeError: Failed to resolve module specifier "Vue". Relative references must start with either "/", "./", or "../".

Vite打包性能優(yōu)化及填坑,性能優(yōu)化

這里有可能是?vue-demi?引入了?vue,然而?rollup-plugin-external-globals?插件配置全局變量時(shí)不會(huì)處理?node_modules?下的依賴項(xiàng),導(dǎo)致?vue-demi?還是通過?import?的方式與?node_modules?下的?vue?進(jìn)行關(guān)聯(lián),而沒有使用全局變量下的?vue,打包后?vue?已變成外部依賴項(xiàng),vue-demi?自然無法找到?vue,所以就報(bào)錯(cuò)了。

vue-demi是哪里來的呢,我的項(xiàng)目是由于element-plus引用了vue-demi,所以此時(shí)解決方案就是將vue-demi也用cdn引入。

總結(jié)

到了這一步,整個(gè)文件夾已經(jīng)完全瘦身了。從一開始的30MB到現(xiàn)在的11.8MB了。我們在項(xiàng)目里面放置了許多json數(shù)據(jù)(因?yàn)闃I(yè)務(wù)原因不能上傳到服務(wù)器),json數(shù)據(jù)已經(jīng)占了差不多5、6mb的原因,所以是一個(gè)單純的項(xiàng)目并沒有這么大。

?Vite打包性能優(yōu)化及填坑,性能優(yōu)化

?文章來源地址http://www.zghlxwxcb.cn/news/detail-694513.html

配置
js
復(fù)制代碼//?vite.config.js
import?{?defineConfig?}?from?'vite'
import?{?createHtmlPlugin?}?from?'vite-plugin-html'
import?viteImagemin?from?'vite-plugin-imagemin'
import?externalGlobals?from?'rollup-plugin-external-globals'
import?{?visualizer?}?from?'rollup-plugin-visualizer'
import?viteCompression?from?'vite-plugin-compression'
//?https://vitejs.dev/config/
export?default?defineConfig({
??plugins:?[
????visualizer({?open:?true?}),
????//?將下面的添加到plugin下
????createHtmlPlugin({
??????minify:?true,
??????inject:?{
????????data:?{
??????????vuescript:?'<script?src="https://cdn.jsdelivr.net/npm/vue@3.2.25"></script>',
??????????demiScript:?'<script?src="http://cdn.jsdelivr.net/npm/vue-demi@0.13.7"></script>',
??????????elementPlusScript:?`
????????????<link?>
????????????<script?src="https://cdn.jsdelivr.net/npm/element-plus@2.2.22/dist/index.full.min.js"></script>
??????????`,
??????????echartsSciprt:?'<script?src="https://cdn.jsdelivr.net/npm/echarts@5.0.2/dist/echarts.min.js"></script>'
????????}
??????}
????}),
????viteImagemin({
??????gifsicle:?{
????????optimizationLevel:?7,
????????interlaced:?false
??????},
??????optipng:?{
????????optimizationLevel:?7
??????},
??????mozjpeg:?{
????????quality:?20
??????},
??????pngquant:?{
????????quality:?[0.8,?0.9],
????????speed:?4
??????},
??????svgo:?{
????????plugins:?[
??????????{
????????????name:?'removeViewBox'
??????????},
??????????{
????????????name:?'removeEmptyAttrs',
????????????active:?false
??????????}
????????]
??????}
????})
??],
??build:?{
????target:?'es2020',
????minify:?'terser',
????//?rollup?配置
????rollupOptions:?{
??????output:?{
????????chunkFileNames:?'js/[name]-[hash].js',?//?引入文件名的名稱
????????entryFileNames:?'js/[name]-[hash].js',?//?包的入口文件名稱
????????assetFileNames:?'[ext]/[name]-[hash].[ext]',?//?資源文件像?字體,圖片等
????????manualChunks(id)?{
??????????if?(id.includes('node_modules'))?{
????????????return?'vendor'
??????????}
????????}
??????},
??????//??告訴打包工具?在external配置的?都是外部依賴項(xiàng)??不需要打包
??????external:?['vue',?'element-plus',?'echarts'],
??????plugins:?[
????????externalGlobals({
??????????vue:?'Vue',
??????????'element-plus':?'ElementPlus',
??????????echarts:?'echarts',
??????????'vue-demi':?'VueDemi'
????????}),
????????viteCompression({
??????????verbose:?true,?//?是否在控制臺(tái)中輸出壓縮結(jié)果
??????????disable:?false,
??????????threshold:?10240,?//?如果體積大于閾值,將被壓縮,單位為b,體積過小時(shí)請不要壓縮,以免適得其反
??????????algorithm:?'gzip',?//?壓縮算法,可選['gzip','?brotliccompress?','deflate?','deflateRaw']
??????????ext:?'.gz',
??????????deleteOriginFile:?false?//?源文件壓縮后是否刪除
????????})
??????]
????},
????terserOptions:?{
??????compress:?{
????????//?生產(chǎn)環(huán)境時(shí)移除console
????????drop_console:?true,
????????drop_debugger:?true
??????}
????}
??}
})

到了這里,關(guān)于Vite打包性能優(yōu)化及填坑的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【vite+vue3.2 項(xiàng)目性能優(yōu)化實(shí)戰(zhàn)】打包體積分析插件rollup-plugin-visualizer視圖分析

    【vite+vue3.2 項(xiàng)目性能優(yōu)化實(shí)戰(zhàn)】打包體積分析插件rollup-plugin-visualizer視圖分析

    rollup-plugin-visualizer 是一個(gè)用于Rollup構(gòu)建工具的插件,它可以生成可視化的構(gòu)建報(bào)告,幫助開發(fā)者更好地了解構(gòu)建過程中的文件大小、依賴關(guān)系等信息。 使用 rollup-plugin-visualizer 插件,可以在構(gòu)建完成后生成一個(gè)交互式的HTML報(bào)告,其中包含了構(gòu)建過程中的各種統(tǒng)計(jì)信息,如文

    2024年02月07日
    瀏覽(39)
  • vite 打包優(yōu)化

    vite 打包優(yōu)化

    在當(dāng)今數(shù)字化時(shí)代,Web應(yīng)用程序已經(jīng)成為了人們生活和工作中不可或缺的一部分。而要構(gòu)建出令人印象深刻且功能強(qiáng)大的Web應(yīng)用程序,就需要掌握一系列前端技術(shù)。前端技術(shù)涵蓋了HTML、CSS和JavaScript等核心技術(shù),以及各種框架、庫和工具。在本專欄中,我們將深入學(xué)習(xí)前端技

    2024年01月18日
    瀏覽(20)
  • vite配置cdn優(yōu)化打包體積

    vite配置cdn優(yōu)化打包體積

    大家都知道前端性能優(yōu)化的方法,cdn外部引入的方法可以使項(xiàng)目打包后體積大大縮小,所以是前端性能優(yōu)化方面非常推薦的方法之一。 本文關(guān)于 vite2 vue3 + Ts 項(xiàng)目如何cdn引入 element plus 做一個(gè)簡單教程,我們可以通過兩種方式引入配置cdn。 由于 vite 的核心基于 rollup 和 webpac

    2024年02月05日
    瀏覽(25)
  • vite打包優(yōu)化vite-plugin-compression的使用

    vite打包優(yōu)化vite-plugin-compression的使用

    當(dāng)前端資源過大時(shí),服務(wù)器請求資源會(huì)比較慢。前端可以將資源通過Gzip壓縮使文件體積減少大概60%左右,壓縮后的文件,通過后端簡單處理,瀏覽器可以將其正常解析出來。 如果瀏覽器的請求頭中包含 c ontent-encoding: gzip,即證明瀏覽器支持該屬性。 前端使用gzip壓縮代碼很容

    2024年02月09日
    瀏覽(23)
  • vue3 + vite 性能優(yōu)化,詳細(xì)代碼說明

    對于Vue 3和Vite應(yīng)用的性能優(yōu)化,以下是一些常見的技巧和建議: 使用Tree-shaking:Vue 3和Vite支持ES模塊的靜態(tài)分析,因此可以利用Tree-shaking特性,只引入項(xiàng)目中實(shí)際使用的模塊,減少打包體積。 懶加載路由:使用Vue Router的動(dòng)態(tài)導(dǎo)入功能,將路由按需加載,可以減少初始加載的

    2024年02月02日
    瀏覽(57)
  • 【前端工程化】深入淺出vite(一)--vite的優(yōu)點(diǎn)及原理、性能優(yōu)化

    【前端工程化】深入淺出vite(一)--vite的優(yōu)點(diǎn)及原理、性能優(yōu)化

    Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依賴更高的 Node 版本才能正常運(yùn)行,當(dāng)你的包管理器發(fā)出警告時(shí),請注意升級你的 Node 版本。 webpack 支持多種模塊化,將不同模塊的依賴關(guān)系構(gòu)建成依賴圖來進(jìn)行統(tǒng)一處理,當(dāng)構(gòu)建的項(xiàng)目越來越大時(shí),需要處理的 JS 代碼也越

    2024年02月11日
    瀏覽(20)
  • vue3 + vite 性能優(yōu)化 ( 從5s -> 0.5s )

    vue3 + vite 性能優(yōu)化 ( 從5s -> 0.5s )

    vite 相比于 webpack 優(yōu)勢顯著 ; 然而 社區(qū) ,卻 不夠成熟 ,參考資料較少; 如何讓vue + vite 構(gòu)建項(xiàng)目變的 訪問秒開 (要想足夠快,就是讓首次加載足夠小),從下面幾步做起 = 個(gè)人通過學(xué)生價(jià)購買的服務(wù)器,已達(dá)到 0.5s 內(nèi)秒開 = 點(diǎn)擊體驗(yàn) 1. ui組件庫的優(yōu)化 ui 組件庫 是打包變

    2024年02月01日
    瀏覽(21)
  • 【vite+vue3.2 項(xiàng)目性能優(yōu)化實(shí)戰(zhàn)】使用vite-plugin-cdn-import進(jìn)行CDN加速優(yōu)化項(xiàng)目體積

    【vite+vue3.2 項(xiàng)目性能優(yōu)化實(shí)戰(zhàn)】使用vite-plugin-cdn-import進(jìn)行CDN加速優(yōu)化項(xiàng)目體積

    CDN (Content Delivery Network)即內(nèi)容分發(fā)網(wǎng)絡(luò),是一種通過在全球范圍內(nèi)分布式部署服務(wù)器來加速網(wǎng)絡(luò)內(nèi)容傳輸?shù)募夹g(shù)。CDN加速的原理是,當(dāng)用戶請求訪問某個(gè)資源時(shí), CDN會(huì)根據(jù)用戶的地理位置和網(wǎng)絡(luò)狀況,自動(dòng)選擇離用戶最近的服務(wù)器來響應(yīng)請求 。如果該服務(wù)器上已經(jīng)緩存了

    2024年02月03日
    瀏覽(97)
  • 性能優(yōu)化之--- 項(xiàng)目打包優(yōu)化(vue)

    項(xiàng)目體積小也是優(yōu)化性能的一個(gè)方向,這里以 Vue 工程為例; 當(dāng)剛運(yùn)行項(xiàng)目的時(shí)候,發(fā)現(xiàn)剛進(jìn)入頁面,就將所有的js文件和css文件加載了進(jìn)來,這一進(jìn)程十分的消耗時(shí)間。 如果打開哪個(gè)頁面就對應(yīng)的加載響應(yīng)頁面的js文件和css文件,那么頁面加載速度會(huì)大大提升。 vue官方文檔

    2024年02月09日
    瀏覽(17)
  • 用webpack做一些前端打包時(shí)的性能優(yōu)化

    一.webpack 的五個(gè)核心概念 1.Entry:入口指示,webpack以哪個(gè)文件為入口起點(diǎn)開始打包,分析構(gòu)建內(nèi)部依賴圖 2.output:輸出指示,webpack打包后的資源bundles輸出到哪里去,以及如何命名 3.loader :loader讓webpack能夠去處翻譯理那些非js文件(img css…) 4.Plugins :Plugins插件可以用于執(zhí)行范圍

    2024年02月12日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包