淺談webpack性能榨汁機(打包速度優(yōu)化)
最近對項目的本地開發(fā)環(huán)境進行了打包速度優(yōu)化,原有項目,網(wǎng)上能搜到的優(yōu)化方案基本都加了,在16年低配mac pro 上打包時間為25秒多,但我發(fā)現(xiàn)細節(jié)做一些調(diào)整可能大大降低打包時間,最終優(yōu)化到7秒多
dll
原有項目是線上和本地公用一套dll配置,因為antd這類ui庫需要按需加載所以不能放到dll中,這時可以單獨寫一個dll配置,將所有第三方庫添加到dll中。
這時因為.babelrc中添加了babel-plugin-import插件會導(dǎo)致優(yōu)化不生效,所以需要對開發(fā)環(huán)境單獨配置babel

options的babelrc設(shè)置為false,然后重寫一份babel配置,一定不要添加“import”插件
一個新問題,因為沒有import插件,導(dǎo)致所有antd組件樣式丟失。這時我在index-template.html中加入一行注釋<!-- local-style -->,在本地打包時將其替換為antd相應(yīng)版本在cdn上的css文件

緩存
cache-loader專治花里胡哨!雖然你能在webpack的配置里找到n種緩存設(shè)置,但我發(fā)現(xiàn)cache-loader可以替代其它選項,它會在你的項目中創(chuàng)建一個 .cache-loader的文件夾,里面存放緩存文件,因為是直接寫入硬盤,所以第一次打包的時候會多消耗幾秒
babel-loader & 多線程
上面的圖中可以看到我將babel-loader升級到8+,新的preset和plugin都有了命名上的變化。preset-env是用來替代以前201X的,通過targets可以指定目標代碼(編譯后代碼)的版本,因為是本地開發(fā),可以指定到chrome的高版本,這樣很多新語法都不需要轉(zhuǎn)換,可以節(jié)省一點時間(打包速度在10秒以下之后減一秒都是10%的提升?。。┎贿^這個方案要慎重使用,因為會造成線上本地環(huán)境不統(tǒng)一,難保不出現(xiàn)什么神奇的bug
拔掉HappyPack提升性能
在測試的過程中我發(fā)現(xiàn)一個神奇的事情,就是HappyPack反倒會降低打包時間,我經(jīng)過反復(fù)測試,似乎babel-loader8+自帶了多線程優(yōu)化,所以HappyPack已經(jīng)沒用了(反而因為線程通信造成了資源浪費)。babel-loader8+的cpu使用率以及打包時間和babel-loader6+加HappyPack是相差不多的,但我在google上搜索時并沒有看到有人提及此事,官網(wǎng)也沒看到有個說明(管他那么多呢,能提升速度就行啦!)
后續(xù)計劃
這個項目是兩個人迭代一年份的代碼量,按照上面的配置大部分項目應(yīng)該都可以優(yōu)化到10秒左右的速度(看項目大小,20秒以下應(yīng)該都是正常的),還有一些小的優(yōu)化細節(jié)對性能影響不大所以忽略掉了。目前webpack還是3+版本,因為4的一些變化擔(dān)心影響過大,暫時沒升級,升級之后應(yīng)該還會有一些小提速
這7秒還不是最終的速度,我估計5秒應(yīng)該沒啥問題,后面再想優(yōu)化就需要腦洞大開了
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS加密插件CryptoJS實現(xiàn)的DES加密示例
這篇文章主要介紹了JS加密插件CryptoJS實現(xiàn)的DES加密,結(jié)合實例形式分析了javascript使用CryptoJS插件進行des加密的各種常見模式使用技巧,需要的朋友可以參考下2018-08-08
JavaScript實現(xiàn)電話號碼格式化的解法小結(jié)
在 JavaScript 編程中,經(jīng)常會遇到將給定數(shù)據(jù)轉(zhuǎn)換為特定格式的問題,本文為大家整理了一些常用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
JS實現(xiàn)HTML頁面中動態(tài)顯示當前時間完整示例
這篇文章主要介紹了JS實現(xiàn)HTML頁面中動態(tài)顯示當前時間,結(jié)合完整實例形式分析了JavaScript使用時間函數(shù)setTimeout及clearTimeout動態(tài)顯示當前時間相關(guān)操作技巧,非常簡單實用,需要的朋友可以參考下2018-07-07
Javascript-Mozilla和IE中的一個函數(shù)直接量的問題分析
Javascript-Mozilla和IE中的一個函數(shù)直接量的問題分析...2007-08-08

