webpack4的splitChunks分包

自從webpack升級到4以來蚌父,號稱零配置哮兰。代碼會自動分割毛萌、壓縮苟弛、優(yōu)化,同時 webpack 也會自動幫你 Scope hoisting 和 Tree-shaking阁将。
說到這里webpack4取消了UglifyjsWebpackPlugin膏秫,使用minimize進行壓縮,取消了CommonsChunkPlugin做盅,使用splitChunks進行分包缤削。

在沒配置任何東西的情況下,webpack 4 就智能的幫你做了代碼分包吹榴。入口文件依賴的文件都被打包進了main.js亭敢,那些大于 30kb 的第三方包,如:echarts图筹、xlsx帅刀、dropzone等都被單獨打包成了一個個獨立 bundle让腹。
其它被我們設(shè)置了異步加載的頁面或者組件變成了一個個chunk,也就是被打包成獨立的bundle扣溺,比如我們的workbook頁面骇窍,是以運用了懶加載路優(yōu)酷加載的。
它內(nèi)置的代碼分割策略是這樣的:
新的 chunk 是否被共享或者是來自 node_modules 的模塊
新的 chunk 體積在壓縮之前是否大于 30kb
按需加載 chunk 的并發(fā)請求數(shù)量小于等于 5 個
頁面初始加載時的并發(fā)請求數(shù)量小于等于 3 個

屏幕快照 2019-03-01 上午9.27.10.png

這是我們項目沒有做任何配置的分包圖锥余,全是webpack做的默認(rèn)配置腹纳。觀察這個分析圖,發(fā)現(xiàn)main.js里面既有node_modules的包驱犹,還有src下的業(yè)務(wù)代碼嘲恍,并且除了main,幾乎每個bundle都是這樣包含node_modules和src下的代碼雄驹,這樣有什么不好的地方呢蛔钙,每次業(yè)務(wù)代碼的變動會導(dǎo)致bundle的hash變化,JS文件緩存失效荠医,要重新下載吁脱,但是node_modules下的文件根本沒有變動,也會一起重新打包彬向。
因為webpack只做了入口文件的依賴代碼打包兼贡,也就是main.js,并且只做了入口文件的公共代碼分析娃胆,只有入口文件引用過的代碼遍希,并且其他chunk頁面也引入了的話,webpack會依據(jù)自身默認(rèn)分包規(guī)則將其分包里烦,如下圖


image.png

但是如果入口文件沒有引入凿蒜,那么其它chunk頁面里面的公共代碼并沒有抽出,導(dǎo)致每個bundle都有重復(fù)打包代碼的情況胁黑,導(dǎo)致整個項目文件較大废封,Gzip壓縮后仍然有2.07Mb,如下圖丧蘸,很明顯antd的table組件都被重復(fù)打包了漂洋,因為入口文件沒有引入,也就沒有被webpack分包


image.png

但凡配置了緩存組力喷,這項目代碼會按照webpack默認(rèn)配置提取刽漂,這個配置提取了項目所有公共引用在2次以上的大于30KB公共代碼塊,不僅是node_modules中的也包括src中的業(yè)務(wù)代碼

cacheGroups{
    common: {
        name: "common",
        chunks: "all",
        minChunks: 2,
        priority: 10,
     }
}
image.png

會用到如 echarts弟孟、xlsx贝咙、dropzone等各種第三方插件,同時又由于是管理后臺拂募,所以本身自己也會寫很多共用組件庭猩,比如各種封裝好的搜索查詢組件乌奇,共用的業(yè)務(wù)模塊等等,如果按照默認(rèn)的拆包規(guī)則眯娱,結(jié)果就不怎么完美了礁苗。
在知道了以上這些規(guī)則的現(xiàn)象后我對項目進行了一個分包,基于的策略是:

  1. 基礎(chǔ)類庫:react徙缴,react-redux试伙,react-router
  2. UI庫:antd,antd-icons
  3. 公共組件庫:自定義的公共組件
  4. 低頻組件:echart
  5. 業(yè)務(wù)代碼

基于以上規(guī)則做出來的拆包結(jié)果如下


image.png

拆分后的包變?yōu)?.24MB于样,有了較大的縮小


image.png

與未拆分的包對比:
image.png

因為拆出了common公共庫疏叨,這個庫主要是node_modules中的公共庫,更新頻率低穿剖,其它頁面chunk都可以公用這塊庫蚤蔓,因此其它頁面都只包含自己業(yè)務(wù)代碼,例如process縮小了75%糊余,modal縮小了87%秀又,workbook縮小了80%,
另外webpack機制下贬芥,把入口文件和其它chunk文件的公共代碼進行抽取吐辙,并且在首頁進行下載,這樣導(dǎo)致首頁的下載文件過多蘸劈,阻塞了網(wǎng)絡(luò)


image.png

抽取common包之后這個問題得到了解決昏苏,因為把一些公共包都打進了common
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市威沫,隨后出現(xiàn)的幾起案子贤惯,更是在濱河造成了極大的恐慌,老刑警劉巖棒掠,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孵构,死亡現(xiàn)場離奇詭異,居然都是意外死亡句柠,警方通過查閱死者的電腦和手機浦译,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溯职,“玉大人,你說我怎么就攤上這事帽哑∶站疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵妻枕,是天一觀的道長僻族。 經(jīng)常有香客問我粘驰,道長,這世上最難降的妖魔是什么述么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任蝌数,我火速辦了婚禮,結(jié)果婚禮上度秘,老公的妹妹穿的比我還像新娘顶伞。我一直安慰自己,他們只是感情好剑梳,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布唆貌。 她就那樣靜靜地躺著,像睡著了一般垢乙。 火紅的嫁衣襯著肌膚如雪锨咙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天追逮,我揣著相機與錄音酪刀,去河邊找鬼。 笑死钮孵,一個胖子當(dāng)著我的面吹牛蓖宦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播油猫,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼稠茂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了情妖?” 一聲冷哼從身側(cè)響起睬关,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毡证,沒想到半個月后电爹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡料睛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年丐箩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恤煞。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡屎勘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出居扒,到底是詐尸還是另有隱情概漱,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布喜喂,位于F島的核電站瓤摧,受9級特大地震影響竿裂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜照弥,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一腻异、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧这揣,春花似錦悔常、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塞俱,卻和暖如春姐帚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背障涯。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工罐旗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唯蝶。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓九秀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粘我。 傳聞我的和親對象是個殘疾皇子鼓蜒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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