最近對專案的本地開發環境進行了打包速度優化,原有專案,網上能搜到的優化方案基本都加了,在16年低配mac pro 上打包時間為25秒多,但我發現細節做一些調整可能大大降低打包時間,最終優化到7秒多
dll
原有專案是線上和本地公用一套dll配置,因為antd這類ui庫需要按需載入所以不能放到dll中,這時可以單獨寫一個dll配置,將所有第三方庫新增到dll中。
這時因為.babelrc中新增了babel-plugin-import外掛會導致優化不生效,所以需要對開發環境單獨配置babel
options的babelrc設定為false,然後重寫一份babel配置,一定不要新增“import”外掛
一個新問題,因為沒有import外掛,導致所有antd元件樣式丟失。這時我在index-template.html中加入一行註釋<!-- local-style -->
,在本地打包時將其替換為antd相應版本在cdn上的css檔案
快取
cache-loader專治花裡胡哨!雖然你能在webpack的配置裡找到n種快取設定,但我發現cache-loader可以替代其它選項,它會在你的專案中建立一個 .cache-loader的資料夾,裡面存放快取檔案,因為是直接寫入硬碟,所以第一次打包的時候會多消耗幾秒
babel-loader & 多執行緒
上面的圖中可以看到我將babel-loader升級到8+,新的preset和plugin都有了命名上的變化。preset-env是用來替代以前201X的,通過targets可以指定目的碼(編譯後程式碼)的版本,因為是本地開發,可以指定到chrome的高版本,這樣很多新語法都不需要轉換,可以節省一點時間(打包速度在10秒以下之後減一秒都是10%的提升啊!)
不過這個方案要慎重使用,因為會造成線上本地環境不統一,難保不出現什麼神奇的bug
拔掉HappyPack提升效能
在測試的過程中我發現一個神奇的事情,就是HappyPack反倒會降低打包時間,我經過反覆測試,似乎babel-loader8+自帶了多執行緒優化,所以HappyPack已經沒用了(反而因為執行緒通訊造成了資源浪費)。babel-loader8+的cpu使用率以及打包時間和babel-loader6+加HappyPack是相差不多的,但我在google上搜尋時並沒有看到有人提及此事,官網也沒看到有個說明(管他那麼多呢,能提升速度就行啦!)
後續計劃
這個專案是兩個人迭代一年份的程式碼量,按照上面的配置大部分專案應該都可以優化到10秒左右的速度(看專案大小,20秒以下應該都是正常的),還有一些小的優化細節對效能影響不大所以忽略掉了。目前webpack還是3+版本,因為4的一些變化擔心影響過大,暫時沒升級,升級之後應該還會有一些小提速
這7秒還不是最終的速度,我估計5秒應該沒啥問題,後面再想優化就需要腦洞大開了