Webpack效能優化

2022-03-08 14:02:37 字數 3178 閱讀 4814

babel-loader :轉換es6、es7等

js新特性語法。

css-loader:支援.css檔案的載入和解析

轉換成commonjs物件

style-loader:將樣式通過

標籤插入到head中

less-loader :將less檔案轉換成

cssts-loader:將ts轉換成

jsfile-loader:進行、文字等的打包、富**檔案、字型。

raw-loader:將檔案以字串的形式匯入。

thread-loader:多程序打包js和

csscleanwebpackplugin:清理構建目錄

extracttextwebpackplugin:將css從

bundle

檔案裡提取成獨立的

css檔案

htmlwebpackplugin:建立html檔案去承載輸出的

bundle

uglifywebpackplugin:壓縮js

postcss + autoprefixer: ⾃動補⻬ css3 字首。

px2rem-loader:移動端 css px ⾃動轉換成 rem。 ⻚⾯渲染時計算根元素的 font-size 值,可以使⽤⼿淘的lib-flexible庫換成

rem。

熱更新

hotmodulereplacementplugin

原理:分為第一次打包和第二次打包,第一次打包將js**打包成

bundle.js

傳給bundle server

然後讓客戶端可以以

loacalhost8080

這種伺服器訪問的方式訪問。第二次,當我修改了**之後,

webpack

會打補丁一樣,將修改的部分打包,然後給到

hmr server

,這個伺服器就會以字串的形式,告訴

hmr runtime

,哪些地方被修改了,哪些地方需要更新。

檔案指紋:用來做版本的管理,比如某個檔案修改了,並不需要把所有的檔案都

發布,只要發布修改了的那部分就行了。

檔案指紋

chunkhash:和 webpack 打包的 chunk 有關,不同的 entry 會⽣成不同的 chunkhash 值

contenthash:根據⽂件內容來定義 hash ,⽂件內容不變,則 contenthash 不變。

效能優化

l js壓縮:內建了 uglifyjs-webpack-plugin,webpack4如果

mode

設定成production

那麼將會自動的進行壓縮。

l css⽂件的壓縮:使⽤ optimize-css-assets-webpack-plugin。同時使⽤ cssnano。

l html⽂件的壓縮:html-webpack-plugin。

l 基礎庫分離:html-webpackexternals-plugin。思路:將 react、

react-dom

基礎包通過

cdn

引⼊,不打⼊ bundle 中。

l 公共指令碼分離:splitchunksplugin,分離⻚⾯公共⽂件。

l tree shaking(搖樹優化

):個模組可能有多個⽅法,只要其中的某個⽅法使⽤到了,則整個⽂件都會被打到bundle ⾥⾯去, tree shaking 就是只把⽤到的⽅法打⼊ bundle , 沒⽤到的⽅法會在uglify 階段被擦除掉。

l scope hoisting

現象:構建後的bundle.js**存在⼤量閉包**. 運⾏**時建立的函式作⽤域變多,記憶體開銷變⼤,⼤量作⽤域包裹**,導致體積增⼤(模組越多越明顯)

結論:被

webpack

轉換後的模組會帶上⼀層包裹。import 會被轉換成

__webpack_require

分析

· 打包出來的是⼀個匿名閉包

· modules 是⼀個陣列,每⼀項是⼀個模組初始化函式

· 通過

webpack_require_method(0)

啟動程式

原理

將所有模組的**按照引⽤順序放在⼀個函式作⽤域⾥,然後適當的重新命名一些變數以防⽌變數名衝突。

:通過 scope hoisting 可以減少函式宣告**和記憶體開銷。

l **分割:

對於⼤的 web 應⽤來講,將所有的**都放在⼀個⽂件中顯然是不夠有效的,特別是當你的某些**塊是在某些特殊的時候才會被使⽤到。 webpack 有⼀個功能就是將你的**庫分割成chunks(語塊),當**運⾏到需要它們的時候再進⾏載入。

懶載入:plugin-syntax-dynamic-import

服務端渲染:html + css + js + data -> 渲染後的

html。

所有模板等資源都儲存在服務端,內⽹機器拉取資料更快,⼀個 html 返回所有資料

客戶端渲染:多個請求(html,資料),

html

和資料序列載入、前端渲染。

服務端渲染

:乙個請求,返回html和資料。核心是減少請求。

服務端渲染優勢:減少⽩屏時間、對於 seo 友好

。客戶端渲染剛開始拉下來的html其實是乙個空的模板,而服務端渲染拉下來的時候頁面就有資料比較豐富,有利於爬蟲抓取資料。

思路:使⽤ react-dom/server 的

rendertostring ⽅法將react 元件渲染成字串

,再把這個string丟到

html

模板裡面去,

服務端路由返回對應的模板。

做法:使⽤打包出來的瀏覽器端 html 為模板,在模板中設定佔位符,動態插⼊元件,就可以解決樣式不顯示的問題。通過設定佔位符,服務端獲取資料然後替換佔位符。

多頁應用:每⼀次⻚⾯跳轉的時候,後台伺服器都會給返回⼀個新的 html ⽂檔,這種型別的⽹站也就是多⻚⽹站,也叫做多⻚應⽤。glob.sync。 

webpack 效能優化

1.2 js 與 css 並行載入 1.3 開啟多執行緒 1.4 使用 dns 載入靜態資料 2.空間維度 webpack 效能優化無非是從時間和空間兩個維度去分析。時間指的是打包時間盡可能快 空間指的是打包體積盡可能小。本文的 webpack 效能優化是基於 webpack 4.3.0 版本。本文...

webpack 效能優化

構建速度 1 優化babel loader 開啟babel loader?cachedirectory,指定範圍 2 ignoreplugin 比如一些外掛程式,預設含有多語言檔案,比如moment.js new webpackignoreplugin locale,moment 去掉所有語言包 然...

Webpack效能優化

在使用webpack打包的時候,當我們的專案工程越來越大的時候就會出現打包的時間越來越長,這個時候需要對打包資源進行一系列的優化。對於 loader 來說,影響打包效率首當其衝必屬 babel 了。因為 babel 會將 轉為字串生成 ast,然後對 ast 繼續進行轉變最後再生成新的 專案越大,轉...