三、webpack優(yōu)化之第三方庫使用 CDN 加載(vue)

本文主要介紹對(duì)第三方庫(如echarts咕缎、element-ui等)的打包優(yōu)化珠十。
采用cdn加載需要聯(lián)網(wǎng)

一凭豪、打包分析

1.1 速度分析

使用speed-measure-webpack-plugin插件可以讓我們知道各個(gè)模塊的耗時(shí)情況和打包總耗時(shí)

1.1.1 安裝

npm i -D speed-measure-webpack-plugin

1.1.2 vue.config.js配置
// 導(dǎo)入速度分析插件
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
// 實(shí)例化插件
const smp = new SpeedMeasurePlugin();
module.exports = {
    configureWebpack: smp.wrap({
        plugins: [
            // 你使用到的其他插件
        ]
    })
}
1.1.3 結(jié)果

打包總耗時(shí)為 25.4secs

圖1-1

項(xiàng)目啟動(dòng)時(shí)焙蹭,也可以看到啟動(dòng)耗時(shí)
圖1-2

1.2 體積分析

webpack打包體積分析這里沒有用額外的插件,就使用了webpack自帶的嫂伞。


圖1-3
1.2.1 package.json配置

在 package.json中添加一條命令:

"http://": "在/dist/report.html中查看webpack打包報(bào)告",
 "report": "vue-cli-service build --report",

1.2.2 結(jié)果

執(zhí)行npm run report孔厉,生成的體積報(bào)告在/dist/report.html

圖1-4

由此可見,第三方庫占比最大帖努,因此采用CDN加載撰豺。

二、第三方庫使用 CDN 加載

為了方便以后管理拼余,將CDN相關(guān)的所有配置寫入cdn.config.js(與vue.config.js同級(jí))

2.1 cdn.config.js配置

module.exports = {
  // 是否使用cdn
  useCDN: true,
  // key是'包名', value是靜態(tài)資源引入后全局的名稱 import Vue from 'vue'
  externals: {
    'vue': 'Vue',
    'vuex': 'Vuex',
    'vue-router': 'VueRouter',
    'axios': 'axios',
    'echarts': 'echarts',
    // 必須是ELEMENT污桦,否則會(huì)報(bào)‘elementUI is not defined’
    'element-ui': 'ELEMENT'
  },
  CDN: {
    // CDN鏈接地址:https://www.jsdelivr.com/
    css: [
      'https://cdn.jsdelivr.net/npm/element-ui@2.15.3/lib/theme-chalk/index.css'
    ],
    js: [
      'https://cdn.jsdelivr.net/npm/vue@2.6.11',
      'https://cdn.jsdelivr.net/npm/vue-router@3.2.0/dist/vue-router.min.js',
      'https://cdn.jsdelivr.net/npm/vuex@3.4.0/dist/vuex.min.js',
      'https://cdn.jsdelivr.net/npm/echarts@5.2.1/dist/echarts.min.js',
      'https://cdn.jsdelivr.net/npm/element-ui@2.15.3/lib/element-ui.common.min.js',
      'https://cdn.jsdelivr.net/npm/axios@0.21.1/dist/axios.min.js'
    ]
  }
}

2.2 vue.config.js配置

const isPRD = process.env.NODE_ENV === 'production';
// cdn相關(guān)配置
const cdnConfig = require('./cdn.config.js');

module.exports = {
  pages: {
    index: {
      // page 的入口
      entry: 'src/main.js',
      // 模板來源
      template: 'public/index.html',
      // 在 dist/index.html 的輸出
      filename: 'index.html',
      // 當(dāng)使用 title 選項(xiàng)時(shí),
      // template 中的 title 標(biāo)簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
      title: '系統(tǒng)名稱',
      // 在這個(gè)頁面中包含的塊匙监,默認(rèn)情況下會(huì)包含
      // 提取出來的通用 chunk 和 vendor chunk凡橱。
      chunks: ['chunk-vendors', 'chunk-common', 'index'],
      // 調(diào)用:htmlWebpackPlugin.options.CDN(設(shè)置CDN鏈接)
      CDN: isPRD && cdnConfig.useCDN ? cdnConfig.CDN : null
    }
  },
  configureWebpack: {
    // 生產(chǎn)環(huán)境注入CDN
    externals: isPRD && cdnConfig.useCDN ? cdnConfig.externals : {}
  }
}

2.3 index.html

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <title><%= htmlWebpackPlugin.options.title %></title>

    <!-- 使用 CDN 的 CSS 文件 start -->
    <% for (var i in htmlWebpackPlugin.options.CDN && htmlWebpackPlugin.options.CDN.css) { %>
      <link href="<%= htmlWebpackPlugin.options.CDN.css[i] %>" rel="stylesheet">
    <% } %>
    <!-- 使用 CDN 的 CSS 文件 end -->

    <!-- 使用 CDN 的 JS 文件 -->
    <% for (var i in htmlWebpackPlugin.options.CDN && htmlWebpackPlugin.options.CDN.js) { %>
      <script src="<%= htmlWebpackPlugin.options.CDN.js[i] %>"></script>
    <% } %>
    <!-- 使用 CDN 的 JS 文件 end -->
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

2.4 main.js修改

index.html已經(jīng)引入了element.ui的css小作,所以這里不需要重復(fù)引入

// 引入element-ui組件庫
import ElementUI from 'element-ui';
// index.html已經(jīng)引入了element.ui的css,所以這里不需要重復(fù)引入
// import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

2.5 結(jié)果

由圖2-1可知稼钩,采用了cdn加載后 打包總耗時(shí)由原來的25.4secs變?yōu)?code>14.75secs

圖2-1

由圖2-2可知顾稀,采用了cdn加載后 打包體積也變小了
圖2-2

圖2-3

由圖2-4可知,使用cdn加載的第三方庫沒有進(jìn)行打包
圖2-4

2.6 可能遇到的問題

相關(guān)文章

一础拨、webpack優(yōu)化之Gzip(vue)
二、webpack優(yōu)化之去除冗余代碼(vue)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绍载,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滔蝉,更是在濱河造成了極大的恐慌击儡,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝠引,死亡現(xiàn)場離奇詭異阳谍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)螃概,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門矫夯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吊洼,你說我怎么就攤上這事训貌。” “怎么了冒窍?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵递沪,是天一觀的道長。 經(jīng)常有香客問我综液,道長款慨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任谬莹,我火速辦了婚禮檩奠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘附帽。我一直安慰自己埠戳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布士葫。 她就那樣靜靜地躺著乞而,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慢显。 梳的紋絲不亂的頭發(fā)上爪模,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天欠啤,我揣著相機(jī)與錄音,去河邊找鬼屋灌。 笑死洁段,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的共郭。 我是一名探鬼主播祠丝,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼除嘹!你這毒婦竟也來了写半?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤尉咕,失蹤者是張志新(化名)和其女友劉穎叠蝇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體年缎,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悔捶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了单芜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜕该。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖洲鸠,靈堂內(nèi)的尸體忽然破棺而出堂淡,到底是詐尸還是另有隱情,我是刑警寧澤扒腕,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布淤齐,位于F島的核電站,受9級(jí)特大地震影響袜匿,放射性物質(zhì)發(fā)生泄漏更啄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一居灯、第九天 我趴在偏房一處隱蔽的房頂上張望祭务。 院中可真熱鬧,春花似錦怪嫌、人聲如沸义锥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拌倍。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柱恤,已是汗流浹背数初。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梗顺,地道東北人泡孩。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像寺谤,于是被迫代替她去往敵國和親仑鸥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容