成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

「 不懂就問 」為什么 Webpack 這么慢 ?

開發 前端
代碼構建階段, 需要做的一個很重要的事情是模塊依賴分析, 生成Module Graph。這部分有十分復雜的流程。

 [[402322]]

背景

上一篇文章我們分析了:為什么 esbuild 這么快

還有數據對比:

可以明顯看到:esbuild 一騎絕塵, 以絕對優勢領先。

看看最下面, 赫然是我們最熟悉的 webpack。

那么, webpack 的構建為什么慢呢?到底慢在哪呢 ?

下面是我的一些思考,分享給大家,希望對大家有所幫助。

正文

首先我們先看一下 webpack 構建的大致流程:

webpack build flow

流程走的比較長。

那么,整個流程的性能瓶頸在哪里呢?

我認為主要是在以下兩個階段:

  1. 代碼構建
  2. 代碼壓縮

圖片

https://www.quora.com/What-is-Webpack-and-babel-loader

我們分別來看。

1. 代碼構建

代碼構建階段, 需要做的一個很重要的事情是模塊依賴分析, 生成Module Graph。

這部分有十分復雜的流程。

webpack build graph

https://medium.com/webpack/the-chunk-graph-algorithm-week-26-29-7c88aa5e4b4e

這部分非常復雜,也比較耗時。

為此 webpack 也設計了對應的的算法去優化這部分,感興趣的可以去研究一下。

這部分的詳細解析,有個視頻講的不錯,感興趣的可以去看一下:

https://youtu.be/Lzh8A0p3z8g

說回構建。

現代瀏覽器對 esm 支持的越來越好,模塊依賴分析的工作,瀏覽器就能完成。

而且, 瀏覽器的很多包分析工具是用C/C++寫的, 顯然是要比 webpack 使用 js 去分析整個依賴圖譜更具優勢,速度上也是要快很多的。

2. 代碼壓縮

目前最成熟的 js 壓縮工具是 UglifyJS。

它會分析 js 的代碼語法樹, 理解代碼含義,從而能做到諸如: 去掉無效代碼,去掉日志輸出代碼,縮短變量名等優化。

webpack 使用壓縮插件來完成這部分工作。

其中: webpack 使用的 terser, 是用 js 寫的, 源自于最早的 uglyfy.js , 功能很豐富, 但是速度非常非常慢。

這點, 也是 webpack 速度慢的原因之一。

不過在代碼壓縮方面, vite 選擇的也是Terser。

對此,文檔中有相關描述:

  • build.minify:
    • 類型:boolean | 'terser' | 'esbuild'
    • 默認:'terser'

設置為 false 可以禁用最小化混淆,或是用來指定使用哪種混淆器。

默認為 Terser。

雖然 Terser 相對較慢,但大多數情況下構建后的文件體積更小。

ESbuild 最小化混淆更快, 但構建后的文件相對更大。

更多信息可以參考:https://cn.vitejs.dev/config/#build-minify

另外,如果你有留意, 就會發現一個現象:

  1. Esbuild, 使用 GO 寫的。
  2. SWC, 是用 Rust 寫的。

都不是用js寫的。

未來前端的編譯工具,大概也會往這個方向走, 要么用 Go 寫, 要么用 Rust 寫,而不是把這種能形成性能瓶頸的東西用 js 來實現。

還有一點需要提一下。

在文章開頭的圖中, 看起來 webpack5 的速度比 webpack4 要慢:

但這不代表 webpack 5 不好,大家不要誤會啊。

webpack 5 里面 做了大量的優化, 甩掉了不少歷史包袱。

有一些新特性還有非常有用的, 比如:

  • Module Federation
  • Real Content Hash

不難想到,webpack 團隊還是做出了很多努力的, ?? 。

總結

這篇文章, 是半夜突然有了思路, 花了兩個小時寫出來。

本文轉載自微信公眾號「前端皮小蛋」,可以通過以下二維碼關注。轉載本文請聯系前端皮小蛋公眾號。

 

責任編輯:武曉燕 來源: 前端皮小蛋
相關推薦

2021-05-27 20:56:51

esbuild 工具JavaScript

2018-08-16 08:03:21

Python語言解釋器

2024-05-27 00:00:01

2016-12-28 11:28:19

.NET反射

2020-08-14 09:11:29

RedisQPS數據庫

2018-10-28 15:40:23

Python編程語言

2022-06-30 08:01:53

mysqlmyisamcount

2015-09-09 11:04:28

Wi-Fi網速

2025-06-20 04:55:00

Wi-Fi組網CSSR

2019-08-30 14:58:47

JavaScript程序員編程語言

2024-02-26 21:15:20

Kafka緩存參數

2013-03-04 10:10:36

WebKit瀏覽器

2022-06-02 08:03:19

PyCharmPython代碼

2020-02-27 15:44:41

Nginx服務器反向代理

2020-02-27 21:03:30

調度器架構效率

2022-06-13 21:52:02

CDN網絡節點

2024-09-27 11:46:51

2022-06-16 14:17:54

網絡網速

2014-05-26 17:00:51

2020-03-30 15:05:46

Kafka消息數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91天堂网 | 久久国产精品视频 | 超碰97免费在线 | 国产91久久久久蜜臀青青天草二 | 欧美在线视频二区 | 2019天天干夜夜操 | 日韩三级在线 | 91久久视频| 伊人看片 | 久久久久久免费看 | 二区在线视频 | 理论片免费在线观看 | 国产一级电影网 | 亚洲一区视频在线 | 日本一区二区高清不卡 | 亚洲视频一区在线观看 | 国产成人精品一区二区三区视频 | 日韩国产中文字幕 | 狠狠操狠狠干 | 国产精品亚洲二区 | 欧美中文字幕在线观看 | 国产色网站| 91在线导航 | 日韩在线国产 | 国产成人短视频在线观看 | 成人做爰9片免费看网站 | www4虎| 亚洲激情网站 | 欧美日产国产成人免费图片 | 国产精品av久久久久久久久久 | 超碰97干| 波多野结衣精品在线 | 亚洲成人av| 日韩免费一区二区 | 国产午夜精品一区二区三区嫩草 | 欧美一级二级视频 | 国产午夜精品一区二区三区在线观看 | 在线一区观看 | 国产精品一区二区视频 | 欧美一区二区三区在线观看 | 免费一区在线 |