webpack根據(jù)性能分析圖優(yōu)化打包

一竖席、 webpack生成性能分析圖

1. vue2.x中檢查webpack.prod.conf.js中是否有以下代碼,如果有以下代碼胧沫,則直接走第四步揍障,如果沒有以下代碼造垛,則繼續(xù)往下閱讀。如果你是vue3.x,也同樣往下閱讀。
if (config.build.bundleAnalyzerReport) {
  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
2.執(zhí)行npm install webpack-bundle-analyzer --save安裝webpack-bundle-analyzer模塊控淡,并在webpack.prod.conf.js文件中加以下代碼
if (config.build.bundleAnalyzerReport) {
    const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
    webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
3. 在config文件夾下打開index.js文件嫌吠,加上以下代碼
build: {
        //  ... 省略已經(jīng)存在的代碼,加上下面的配置項
        bundleAnalyzerReport: !!process.env.npm_config_report
}
4. 在package.json的scripts這個key中加上以下命令
"scripts": {
        "analyz": "npm_config_report=true npm run build"
},

以上注意點
(1)以上代碼配置好了之后掺炭,在終端輸入npm run analyz命令辫诅,瀏覽就會自動打開127.0.0.0:8888頁面,出現(xiàn)打包的性能分析圖
(2)如果涧狮,執(zhí)行了npm run analyz命令炕矮,瀏覽器并沒有出現(xiàn)打包的性能分析圖,那么就要看在執(zhí)行命令npm run analyz的時候有沒有走進if (config.build.bundleAnalyzerReport) {}這個條件中者冤,如果沒有走進去的話肤视,那瀏覽器端是不可能出現(xiàn)性能圖的∩娣悖可以試著將webpack.prod.conf.js文件中的if條件判斷寫死邢滑,if (true) {},那么打包的時候就肯定會走進這個條件判斷中拜银,那么性能圖就會出現(xiàn)在瀏覽器中
(3)流程梳理:看下面的指向圖

流程梳理圖

二殊鞭、分析性能圖

1. 項目生成的性能分析圖如下(感覺好雜亂,慢慢梳理)
性能分析圖

這些紅色橙色尼桶,說明打包后的js文件比較大,重點分析這些紅色锯仪,橙色的js文件泵督。這些紅色橙色的文件中,都有一個叫moment的模塊庶喜,占據(jù)了超過二分之一的體積小腊。還有一些重復(fù)加載的模塊...

2. 打包后的js文件大小,重點看一下上百kb大小的文件
上百kb的文件

一個頁面三位數(shù)大小的文件久窟,對于一個頁面來說可能是大了點(捂臉哭)秩冈,看看這些性能分析圖吧。有些模塊加載了兩三次甚至更多次斥扛、有些模塊本身就很大入问、有些頁面引入組件太過累贅。我們主要做的目的是減小這些打包后的js文件大小稀颁。

三芬失、根據(jù)分析性能圖,做出優(yōu)化

1. 檢查有重復(fù)引入組件的嫌疑
重復(fù)引入的組件例

此模塊在全局中就引入這個組件匾灶,但是在每個單獨的頁面棱烂,依然還是引入這個微信的sdk文件,這個就可以優(yōu)化了阶女。不僅僅是這一個組件重復(fù)引入了颊糜。依次檢查是否有重復(fù)引入的文件哩治,依次排查,干掉它們衬鱼。

2. 將引用超過兩次的模塊业筏,單獨剝離開

就著重看一下這個最大的4.xxx.js,438kb這個文件吧馁启。分析這個文件來看看如何優(yōu)化打包后的js文件
(1)4.xxx.js文件性能分析圖

4.xxx.js文件性能分析圖

分析圖分為兩個部分驾孔,左邊是模塊打包,右邊是文件代碼的打包惯疙。一眼看過去翠勉,就是左邊的模塊是不是占據(jù)太大了。而且我整體看了一下霉颠,這些打包比較大的文件都是模塊node_modules占據(jù)很大的空間对碌,需要優(yōu)化了。
看到網(wǎng)上都說可以配置:超過兩次引用的文件可以收集起來蒿偎,只打包一次朽们,那我們就來試試看吧。
(2)在webpack.prod.conf.js文件中plugins中加入下面的代碼诉位,然后重新執(zhí)行npm run analyz命令

new webpack.optimize.CommonsChunkPlugin({
    async: 'used-twice',
    minChunks: (module, count) => (
      count >= 2
    )
})
重新打包的分析圖

打包的文件確實小了很多骑脱,但是0.xxx.js文件1.38M冒出來了,而且這個1.38M的文件每個頁面都會加載這個js苍糠,我看了一下這個1.38M的打包的文件都是用了兩次以上的包的集合叁丧。額...但是每個頁面都要加載這個js的文件,不能接受岳瞭∮德Γ可不可以使用緩存機制,但是我們線上設(shè)置了前端不緩存這個bug瞳筏。
(3)繼續(xù)分析稚瘾,看了一下之前的性能分析圖,那些紅色橙色的文件都包含了moment這個模塊姚炕,去項目中看看這個moment模塊摊欠,不看不知道,一看嚇一跳钻心,這個模塊居然是用來格式化時間的凄硼,一萬個為什么,為什么要引入時間格式化的模塊捷沸,時間格式化的js摊沉,網(wǎng)上一說一大把,不知道之前的開發(fā)人員是怎么想的痒给。
如何優(yōu)化说墨,那就是讓相關(guān)引用moment模塊的開發(fā)人員骏全,自己抽出一個公用方法,將這個moment模塊給去掉尼斧,不能使用這個模塊姜贡。堅決不可以使用這個模塊。干掉moment模塊棺棵。


moment模塊帶來的災(zāi)難
3. 路由懶加載

按需加載路由組件楼咳,按照以下的代碼進行修改
路由文件舊文件

import ShowBlogs from '@/components/ShowBlogs'
routes:[ path: 'Blogs', name: 'ShowBlogs', component: ShowBlogs ]

改成下面的形式,按需加載

routes:[ path: 'Blogs',name: 'ShowBlogs',component: () => import('./components/ShowBlogs.vue')

小提示:我按照這種形式烛恤,打包后的文件母怜,確實減了很多體積,但是main.js文件為什么還變大了缚柏,有待我分析其中的疑點苹熏。

以上是我對性能分析圖的分析,有啥不對的地方币喧,歡迎指正

參照文章
Webpack 大法之 Code Splitting
前端開發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末轨域,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杀餐,更是在濱河造成了極大的恐慌干发,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件史翘,死亡現(xiàn)場離奇詭異铐然,居然都是意外死亡,警方通過查閱死者的電腦和手機恶座,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沥阳,“玉大人跨琳,你說我怎么就攤上這事⊥┖保” “怎么了脉让?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長功炮。 經(jīng)常有香客問我溅潜,道長,這世上最難降的妖魔是什么薪伏? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任滚澜,我火速辦了婚禮,結(jié)果婚禮上嫁怀,老公的妹妹穿的比我還像新娘设捐。我一直安慰自己借浊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布萝招。 她就那樣靜靜地躺著蚂斤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪槐沼。 梳的紋絲不亂的頭發(fā)上曙蒸,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音岗钩,去河邊找鬼纽窟。 笑死,一個胖子當(dāng)著我的面吹牛凹嘲,可吹牛的內(nèi)容都是我干的师倔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼周蹭,長吁一口氣:“原來是場噩夢啊……” “哼趋艘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凶朗,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤瓷胧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棚愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搓萧,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年宛畦,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘸洛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡次和,死狀恐怖反肋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踏施,我是刑警寧澤石蔗,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站畅形,受9級特大地震影響养距,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日熬,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一棍厌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦定铜、人聲如沸阳液。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帘皿。三九已至,卻和暖如春畸陡,著一層夾襖步出監(jiān)牢的瞬間鹰溜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工丁恭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留曹动,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓牲览,卻偏偏與公主長得像墓陈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子第献,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,273評論 4 31
  • 目錄第1章 webpack簡介 11.1 webpack是什么贡必? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,731評論 0 1
  • 原文首發(fā)于:Webpack 3仔拟,從入門到放棄 Update (2017.8.27) : 關(guān)于 output.pub...
    昵稱都被用完了衰閱讀 1,884評論 4 19
  • 還是憶起了江南,夢中的江南霏霏春雨飒赃,立春二月利花,江南草長,碧綠如茵载佳。在如畫的船中傾聽細雨炒事,撐著油紙傘在...
    南國小溪閱讀 254評論 0 0
  • 文│奇點 [ 原創(chuàng)] 我是認知體系架構(gòu)師——奇點,如果你目前是一個中層管理者或者想晉升為中層管理者蔫慧,請關(guān)注或閱讀我...
    奇點極簡管理閱讀 313評論 0 8