欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

VUE3項目VITE打包優(yōu)化的實現(xiàn)

 更新時間:2025年03月26日 09:20:16   作者:KjPrime  
本文主要介紹了VUE3項目VITE打包優(yōu)化的實現(xiàn),包括使用視圖分析工具、路由懶加載、第三方庫CDN引入、gzip壓縮、按需引入第三方庫、TreeShaking、剔除console和debugger、分包策略和圖片壓縮等,具有一定的參考價值,感興趣的可以了解一下

1、前言

Vue項目開發(fā)完畢后,對項目進行打包發(fā)布之前,必不可少的操作就是項目優(yōu)化,這也是程序猿的加分項。跟隨本文的腳步來看看如何對項目進行優(yōu)化吧!

2、視圖分析工具rollup-plugin-visualizer

在項目中使用rollup-plugin-visualizer 插件可以生成可視化的代碼分析報告,看看哪些模塊占用了空間,幫助我們更好地了解構(gòu)建過程中的文件大小、依賴關(guān)系等信息。

  • 首先安裝了 rollup-plugin-visualizer 插件??梢允褂?nbsp;npm 或者 yarn 進行安裝:
yarn add rollup-plugin-visualizer -D
npm i rollup-plugin-visualizer -D
  • vite.config.js中引入 rollup-plugin-visualizer 插件,并將其添加到插件列表中。
import { visualizer } from 'rollup-plugin-visualizer';
export default defineConfig({
  plugins: [
  vue(), 
  visualizer({
    open: true, //在默認用戶代理中打開生成的文件
    gzipSize: true, // 收集 gzip 大小并將其顯示
    brotliSize: true, // 收集 brotli 大小并將其顯示
    filename: "stats.html", // 分析圖生成的文件名
  }),
})

配置的參數(shù)有很多是默認的,如果你沒有特殊需求,完全可以不添加參數(shù);下面我添加一個表格對已有參數(shù)進行詮釋:

參數(shù)類型解釋
filename/filestring生成分析的文件名
titlestringhtml標簽頁標題
openboolean以默認服務(wù)器代理打開文件
templatestring可選擇的圖表類型
gzipSizeboolean搜集gzip壓縮包的大小到圖表
BrotliSizeboolearn搜集brotli壓縮包的大小到圖表
emitFileboolean使用emitFile生成文件,簡單說,這個屬性為true,打包后的分析文件會出現(xiàn)在打包好的文件包下,否則就會在項目目錄下
sourcemapboolean使用sourcemap計算大小
projectRootstring, RegExp文件的根目錄,默認在打包好的目錄下
  • 運行命令打包,生成分析圖。 執(zhí)行npm run build命令后等待片刻,生成分析視圖,視圖會自動跳出來,并保存在項目根目錄下,文件名就是剛剛參數(shù)filename的名字(stats.html)
npm run build

在生成的打包文件所在目錄下,會生成一個名為 stats.html 的文件,這就是生成的可視化報告。
打開 stats.html 文件,你將看到一個交互式的可視化圖表,顯示了打包文件中各個模塊的大小、依賴關(guān)系等信息。你可以通過這個圖表來識別哪些模塊占用了較大的空間,從而進行代碼優(yōu)化。

在這里插入圖片描述

視圖分析中方塊越大,表示該文件占用的空間越大,對于網(wǎng)絡(luò)帶寬和訪問速度的要求就越高。如果一個網(wǎng)站中包含大量的大文件,那么用戶在訪問該網(wǎng)站時需要下載更多的數(shù)據(jù),這會導(dǎo)致網(wǎng)站加載速度變慢,用戶體驗變差。

3、路由懶加載

路由懶加載的實現(xiàn)方式通常是使用動態(tài)導(dǎo)入(Dynamic Import)語法,比如在 Vue 項目中使用 import() 來導(dǎo)入需要懶加載的組件。當用戶訪問到對應(yīng)的路由時,該組件才會被異步加載,實現(xiàn)了按需加載的效果。

export const constantRoute = [
	{
	    path: '/login',
	    component: () => import('@/views/login/index.vue'),
	    name: 'Login',
	    meta: {
	        title: '登錄', //菜單標題
	        hidden: true, //代表路由標題在菜單中是否隱藏  true:隱藏 false:不隱藏
	        icon: 'Promotion',
	    },
	},
	{
	    path: '/',
	    component: () => import('@/layout/index.vue'),
	    name: '/',
	    meta: {
	        title: '',
	        hidden: false,
	
	    },
	    redirect: '/home',
	    children: [{
	        path: '/home',
	        component: () => import('@/views/home/index.vue'),
	        meta: {
	            title: '項目總覽',
	            hidden: false,
	            icon: 'HomeFilled',
	        },
	    },],
	},
	{
	    path: '/user',
	    component: () => import('@/views/user/index.vue'),
	    name: 'User',
	    meta: {
	        title: '個人中心',
	        hidden: true,
	    },
	},
	{
	    path: '/404',
	    component: () => import('@/views/404/index.vue'),
	    name: '404',
	    meta: {
	        title: '找不到數(shù)據(jù)',
	        hidden: true,
	    },
	},
]

4、第三方庫CDN引入

在項目中可根據(jù)需要引入第三方庫CDN,使用CDN引入第三方庫可以提高項目的性能和開發(fā)效率,減少項目的體積,同時也可以減輕服務(wù)器的負擔,提高用戶體驗。

  • 安裝插件
npm install vite-plugin-cdn-import -D
yarn add vite-plugin-cdn-import -D
  • vite.config.js中進行配置
import { defineConfig } from 'vite';
import compression from 'vite-plugin-compression';
export default defineConfig({
  // 其他配置項...
  plugins: [
    // 其他插件...
    // 第三方庫CDN引入
    importToCDN({
      prodUrl: "https://unpkg.com/{name}@{path}",
      modules: [
        autoComplete('vue'),
        autoComplete('axios'),
        {
          name: "vue-router",
          var: "VueRouter",
          path: "4.1.3",
        },
        {
          name: "element-plus",
          var: "ElementPlus",
          path: "2.2.14",
          css: "2.2.14/dist/index.css",
        },
        {
          name: "@element-plus/icons-vue",
          var: "ElementPlusIconsVue", // 根據(jù)main.js中定義的來
          path: "2.0.9",
        },
        {
          name: "pinia",
          var: "Pinia",
          path: "2.0.34",
        },
        {
          name: "lodash",
          var: "Lodash",
          path: "4.17.21",
        },
      ],
    }),
  ],
});

5、使用 gzip 壓縮

gzip壓縮是一種常用的數(shù)據(jù)壓縮算法,它可以減小文件的大小,從而減少文件的傳輸時間和占用空間。gzip壓縮算法基于DEFLATE算法,使用了哈夫曼編碼和LZ77算法來實現(xiàn)高效的數(shù)據(jù)壓縮。
當使用gzip壓縮文件時,文件會被轉(zhuǎn)換為一種經(jīng)過壓縮和編碼的格式。這種格式可以通過減少冗余數(shù)據(jù)和使用更緊湊的編碼方式來降低文件的大小。壓縮后的文件通常以.gz為擴展名。

  • 安裝插件
yarn add vite-plugin-compression -D
npm i vite-plugin-compression -D
  • vite.config.js中進行配置
import { defineConfig } from 'vite';
import compression from 'vite-plugin-compression';
export default defineConfig({
  // 其他配置項...
  plugins: [
    // 其他插件...
    compression({
      algorithm: "gzip", // 指定壓縮算法為gzip,[ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
      ext: ".gz", // 指定壓縮后的文件擴展名為.gz
      threshold: 10240, // 僅對文件大小大于threshold的文件進行壓縮,默認為10KB
      deleteOriginFile: false, // 是否刪除原始文件,默認為false
      filter: /\.(js|css|json|html|ico|svg)(\?.*)?$/i, // 匹配要壓縮的文件的正則表達式,默認為匹配.js、.css、.json、.html、.ico和.svg文件
      compressionOptions: { level: 9 }, // 指定gzip壓縮級別,默認為9(最高級別)
      verbose: true, //是否在控制臺輸出壓縮結(jié)果
      disable: false, //是否禁用插件
    }),
  ],
});

在這里插入圖片描述

6、按需引入第三方庫

對于一些較大的第三方庫,如 Element UI或 Ant Design,可以考慮按需引入組件或樣式,而不是全部引入。按需引入組件或樣式可以參考這些第三方庫的官方文檔,在里面有介紹如何按需引入組件或樣式。

7、使用 Tree Shaking

treeshaking 也被稱為 “搖樹優(yōu)化”。簡單來講,就是在保證代碼運行結(jié)果不變的前提下,去除無用的代碼。Vue3中,許多 ApI的引入都支持 treeshaking 優(yōu)化。也就是說只打包你用到的 API,忽略那些沒有用到的。

Vue3 會默認使用 Rollup 進行 treeshaking ,不需要額外進行配置。但有一個條件,必須是 ES6 module 模塊才行。

8、剔除console和debugger

  • vite 4.X 版本已經(jīng)不集成 terser,需要自行下載。
yarn add terser -D
npm i terser -D
  • vite.config.js中進行配置
import { defineConfig } from "vite";  
export default defineConfig({  
    build: {  
        minify: 'terser', // 啟用 terser 壓縮  
        terserOptions: {  
            compress: {  
                pure_funcs: ['console.log'], // 只刪除 console.log 
                //drop_console: true, // 刪除所有 console
                drop_debugger: true, // 刪除 debugger  
            }  
        }  
    }  
})  

9、分包策略

默認情況下,瀏覽器重復(fù)請求相同名稱的靜態(tài)資源時,會直接使用緩存的資源。利用這個機制我們可以將不會經(jīng)常更新的代碼單獨打包成一個 JS 文件,這樣就可以減少 HTTP 請求,同時降低服務(wù)器壓力。

manualChunks自定義分割

// vite.config.js
import { defineConfig } from 'vite'

export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks: id => {
          // 將 node_modules 中的代碼單獨打包成一個 JS 文件
          if(id.includes('node_modules')) {
            return 'vendor'
          }
        }
      }
    }
  }
})

在這里插入圖片描述

可以看到依賴模塊已經(jīng)單獨生成一個 JS 文件了。這樣我們即使修改了 main.js 中的代碼重新打包,依賴文件 vendor.b3aecacd.js 也不會發(fā)生變化的,對于這個文件,瀏覽器也不會再次發(fā)起請求。如果依賴模塊很多的話,性能將會有很大的提升。

10、圖片壓縮

根據(jù)項目對清晰度的要求,我們可以使用 vite-plugin-imagemin 插件,對圖片進行適當壓縮:

  • 安裝npm i vite-plugin-imagemin -D插件
  • vite.config.js中進行配置
// vite.config.js
import { defineConfig } from 'vite'
import viteImagemin from 'vite-plugin-imagemin'

export default defineConfig({
  plugins: [
    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)報錯,可以嘗試一下下面幾種解決方案。
viteImagemin報錯

  • 使用 yarn 在 package.json 內(nèi)配置(推薦)
"resolutions": {
	"bin-wrapper": "npm:bin-wrapper-china"
}
  • 使用 npm,在電腦 host 文件加上如下配置即可
199.232.4.133 raw.githubusercontent.com
  • 使用 cnpm 安裝(不推薦)

到此這篇關(guān)于VUE3項目VITE打包優(yōu)化的實現(xiàn)的文章就介紹到這了,更多相關(guān)VUE3 VITE打包優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Vue打包路徑配置過程

    Vue打包路徑配置過程

    這篇文章主要介紹了Vue打包路徑配置過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue 自定義指令功能完整實例

    Vue 自定義指令功能完整實例

    這篇文章主要介紹了Vue 自定義指令功能,結(jié)合完整實例形式分析了vue.js自定義指令相關(guān)實現(xiàn)與使用操作技巧,需要的朋友可以參考下
    2019-09-09
  • electron-vite工具打包后如何通過內(nèi)置配置文件動態(tài)修改接口地址

    electron-vite工具打包后如何通過內(nèi)置配置文件動態(tài)修改接口地址

    使用electron-vite?工具開發(fā)項目打包完后每次要改接口地址都要重新打包,對于多環(huán)境切換或者頻繁變更接口地址就顯得麻煩,這篇文章主要介紹了electron-vite工具打包后通過內(nèi)置配置文件動態(tài)修改接口地址實現(xiàn)方法,需要的朋友可以參考下
    2024-05-05
  • vue引用外部JS的兩種種方法

    vue引用外部JS的兩種種方法

    這篇文章主要介紹了vue引用外部JS的兩種種方案,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • vue中el-table實現(xiàn)自動吸頂效果(支持fixed)

    vue中el-table實現(xiàn)自動吸頂效果(支持fixed)

    本文主要介紹了vue中el-table實現(xiàn)自動吸頂效果,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 基于Vue實現(xiàn)拖拽效果

    基于Vue實現(xiàn)拖拽效果

    這篇文章主要介紹了基于Vue實現(xiàn)拖拽效果,文中給大家介紹了clientY pageY screenY layerY offsetY的區(qū)別講解,需要的朋友可以參考下
    2018-04-04
  • vue3動態(tài)組件使用詳解

    vue3動態(tài)組件使用詳解

    這篇文章主要介紹了vue3動態(tài)組件使用詳解的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 修改vue源碼實現(xiàn)動態(tài)路由緩存的方法

    修改vue源碼實現(xiàn)動態(tài)路由緩存的方法

    這篇文章主要介紹了修改vue源碼實現(xiàn)動態(tài)路由緩存的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 詳解在Vue中如何實現(xiàn)表單圖片裁剪與預(yù)覽

    詳解在Vue中如何實現(xiàn)表單圖片裁剪與預(yù)覽

    在前端開發(fā)中,表單提交是一個常見的操作,有時候,我們需要上傳圖片,但是上傳的圖片可能會非常大,這會增加服務(wù)器的負擔,同時也會降低用戶的體驗,因此,我們通常需要對上傳的圖片進行裁剪和預(yù)覽,本文主要給大家介紹如何在Vue中進行表單圖片裁剪與預(yù)覽
    2023-06-06
  • Vue3使用setup監(jiān)聽props實現(xiàn)方法詳解

    Vue3使用setup監(jiān)聽props實現(xiàn)方法詳解

    這篇文章主要為大家介紹了Vue3使用setup監(jiān)聽props實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論