webpack構(gòu)建速度和體積優(yōu)化策略

一. 都有哪些策略身隐?

  1. Scope Hoisting
  2. Tree-sharking
  3. 公共資源分離
  4. 圖片壓縮
  5. 動態(tài)Polyfill

二. 具體是什么席揽,有哪些細(xì)節(jié)对途?

1. 初級分析:使用webpack內(nèi)置的stats(構(gòu)建的統(tǒng)計信息)

2. 速度分析:使用spees-measure-webpack-plugin

用法如下:

const SpeedMeasureWebpackPlugin = require(‘speed-measure-webpack-plugin’);
const smp = new SpeedMeasureWebpackPlugin();
const webpackConfig = smp.wrap({
    plugins: [
        new Myplugin(),
        new MyOtherPugin()
    ]
})

可以看到每個loader和插件執(zhí)行耗時
為什么要用速度分析插件替裆?

  1. 為了分析整個打包耗時
  2. 分析每個插件和loader的耗時情況

3. 體積分析:使用web pack-bundle-analyzer

代碼示例:

const BundleAnalyzerPlugin = require(“webpack-bundle-analyzer”)
  .BundleAnalyzerPlugin;

module.exports = {
  plugins: [new BundleAnalyzerPlugin()()]
};

可以分析哪些問題雌隅?

  1. 依賴的第三方模塊文件大小
  2. 業(yè)務(wù)里面的組件代碼大小

4. 使用更高版本的webapck和node.js

webpack4相比較webpack3構(gòu)建時間降低了60%-80%;

webpack4做了哪些優(yōu)化臼婆?
  1. V8帶來的優(yōu)化(for of 替代forEach 抒痒、 Map和Set替代 Object,includes替代indexOf)
  2. 默認(rèn)使用更快算法的md4 hash算法
  3. webpack AST可以直接從loader傳遞給AST,減少解析時間
  4. 使用字符串方法替代正則表達(dá)式颁褂。

5. 多進(jìn)程/多實例構(gòu)建

  1. 使用HappyHack解析資源
  2. 使用 thread-loader解析資源
  3. 并行壓縮

6. 分包

  1. 設(shè)置Externals
  2. 預(yù)編譯資源模塊

7.緩存

目的:提升二次構(gòu)建速度
緩存思路:

  1. babel-loader開啟緩存
  2. Terser-webpack-plugin開啟緩存
  3. cahcher-loader或者h(yuǎn)ard-source-webpack-plugin

8.縮小構(gòu)建目標(biāo)

目的:盡可能的少構(gòu)建模塊

  1. 比如babel-loader不解析node_modules
module.exports = {
    rules: [
        test: /\.js$/,
        loader: ‘happypack/loader’,
        // 不解析node_modules
        exclude: ‘node_modules’
    ]
}
  1. 減少文件搜索范圍
module.exports = {
    resolve: {
        alias: {
          ‘react’: path.resolve(__dirname, ‘./node_modules/react/umd/react.production.min.js’),
        // 減少模塊搜索層級
        modules: [path.resolve(__dirname, 'node_modules')],
        extensions: ['.js'],
        mainFields: ['main']
    }
}

9. 使用Tree Shaking擦除無用的js和css

什么是tree shaking故响?

1個模塊可能有多個方法,只要其中的某個方法使用到了颁独,則整個文件都會被打到bundle里面彩届,tree shaking 就是只把用到的方法打入bundle,沒用到的方法在uglify階段擦除掉。(也就是按需打包使用到的方法)

無用的css如何刪除誓酒?

  1. PurifyCss: 遍歷代碼樟蠕,識別已經(jīng)用到的css class
  2. uincss : html需要通過jsdom加載,所有的樣式通過PostCSS解析丰捷,通過document.querySelector來識別在html文件里面不存在的選擇器

10. 圖片壓縮

使用imagemin或者tinypng API,通過配置image-webpack-loader即可坯墨。

{
        test: /.(png|jpg|gif|jpeg)$/,
        use: [
          {
            loader: “file-loader”,
            options: {
              name: “[name]_[hash:8].[ext]”
            }
          },
          {
            loader: “image-webpack-loader”,
            options: {
              mozjpeg: {
                progressive: true,
                quality: 65
              },
              // optipng.enabled: false will disable optipng
              optipng: {
                enabled: false
              },
              pngquant: {
                quality: "65-90",
                speed: 4
              },
              gifsicle: {
                interlaced: false
              },
              // the webp option will enable WEBP
              webp: {
                quality: 75
              }
            }
          }
        ]
      }

imagemin的優(yōu)點(diǎn):

  1. 有很多定制選項
  2. 可以引入更多的第三方優(yōu)化插件
  3. 可以處理多種圖片格式

imagemin的壓縮原理

  1. pngquant:是一款PNG壓縮器,通過將圖像轉(zhuǎn)換為具有alpha通道(通常比24/32位PNG文件小60%-80%) 的更高效的8位PNG格式病往,可顯著減小文件大小捣染。
  2. Pngcrush: 其主要目的是通過嘗試不同的壓縮級別和PNG過濾方法來降低PNG IDAT數(shù)據(jù)流的大小。
  3. optipng: 其設(shè)計靈感來自于pngcrush.optinpng可將圖像文件重新壓縮為更小尺寸停巷,而不會丟失任何信息耍攘。
  4. tinypng: 將24位PNG文件轉(zhuǎn)換為更小有索引的8位圖片榕栏,同時所有非必要的metadata也會被剝離

11. 使用動態(tài)Polyfill服務(wù):Polyfill Service

Polyfill Service原理:識別不同的user agent,下發(fā)不同的Polyfill

如何使用蕾各?

  1. polyfill.io官方提供服務(wù)扒磁,網(wǎng)址如下:https://polyfill.io/v3/polyfill.min.js
  2. 基于官方自建polyfill服務(wù):(網(wǎng)址換成自己的網(wǎng)址即可)

三:這一章跟你有什么關(guān)系?

這一章是webpack的進(jìn)階用法式曲,提出了在擁有基本webpack配置的情況下如何更優(yōu)秀荡短。是高級前端用的到工程化優(yōu)化方案来吩。
通過學(xué)習(xí)這一章圈纺,我意識到webapck社區(qū)也是真的強(qiáng)了讨,現(xiàn)在場景下的需求基本都有對應(yīng)的loader和插件可供使用。
前端工程化钧排,webpack值得好好深入學(xué)習(xí)敦腔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恨溜,隨后出現(xiàn)的幾起案子符衔,更是在濱河造成了極大的恐慌,老刑警劉巖糟袁,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件判族,死亡現(xiàn)場離奇詭異,居然都是意外死亡系吭,警方通過查閱死者的電腦和手機(jī)五嫂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肯尺,“玉大人,你說我怎么就攤上這事躯枢≡蛞鳎” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵锄蹂,是天一觀的道長氓仲。 經(jīng)常有香客問我,道長得糜,這世上最難降的妖魔是什么敬扛? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮朝抖,結(jié)果婚禮上啥箭,老公的妹妹穿的比我還像新娘。我一直安慰自己治宣,他們只是感情好急侥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布砌滞。 她就那樣靜靜地躺著,像睡著了一般坏怪。 火紅的嫁衣襯著肌膚如雪贝润。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天铝宵,我揣著相機(jī)與錄音打掘,去河邊找鬼。 笑死鹏秋,一個胖子當(dāng)著我的面吹牛尊蚁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拼岳,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼枝誊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惜纸?” 一聲冷哼從身側(cè)響起叶撒,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耐版,沒想到半個月后祠够,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粪牲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年古瓤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腺阳。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡落君,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亭引,到底是詐尸還是另有隱情绎速,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布焙蚓,位于F島的核電站纹冤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏购公。R本人自食惡果不足惜萌京,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宏浩。 院中可真熱鬧知残,春花似錦、人聲如沸绘闷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扒最,卻和暖如春丑勤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吧趣。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工法竞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人强挫。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓岔霸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俯渤。 傳聞我的和親對象是個殘疾皇子呆细,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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

  • 我要將感傷無限放大!
    自亂陣腳閱讀 153評論 0 0
  • 開始決定要寫東西了,寫些什么不知道梨树,總之就是要寫坑夯。 在半年前開始斷斷續(xù)續(xù)的看書、也有了寫心得總結(jié)的念頭抡四,但也只是念...
    奇峰丹色閱讀 444評論 5 9
  • 作者:高曉松 2001年1月30日柜蜈,杰出的華人女性趙小蘭出任美國政府勞工部長,成為美國首任華人女部長指巡。首先淑履,在美國...
    左右文摘閱讀 295評論 0 0
  • 希望有一天能不在這樣 一點(diǎn)真實的交流都沒有 希望有一天能不在這樣 挑問題就最在行 希望有一天能不在這樣 一言不合就...
    藍(lán)色與白色閱讀 183評論 0 0
  • 在英語中“First snow(初雪)”既可以是專有名詞,也可以是普通名詞藻雪。2016年11月21日鳖谈,北京,鄭州迎來...
    簡孟龍閱讀 213評論 2 1