1.2 js 與 css 並行載入
1.3 開啟多執行緒
1.4 使用 dns 載入靜態資料
2. 空間維度
webpack 效能優化無非是從時間和空間兩個維度去分析。時間指的是打包時間盡可能快;空間指的是打包體積盡可能小。本文的 webpack 效能優化是基於 webpack 4.3.0 版本。本文主要是闡述 webpack 效能優化方面的內容,更多 webpack 知識可參考 wabpack 中 loader 和 plugins 的區別 和 webpack 4 新特性
配置示例:
,
以上示例中配置了 babel-loader,其功能是將 es6 語法轉換為 es5 語法,請注意babel-loader?cachedirectory=true
,這行配置的意思是對已經轉換過的未經改動的編譯檔案進行快取,以此可以加快打包時間。注意需要排除 node_modules 資料夾,因為該檔案所在的 js 使用的是 es5 語法,所以沒必要再使用 babel 轉換。
不管是 react 框架還是 vue 框架,有些模組比如 react 、react-router、vue、vue-router 等一般情況下(除非模組公升級)都不會改動,所以在打包的時候希望這些資源能夠被快取下來。那麼首先得把這些模組進行分割,然後快取。所以這裡有兩步。
第一步:**分割,使用 webpack 內建的 optimization.splitchunks 配置
示例如下:
optimization:}}
},
在 webpack4 之前使用的是 commonschunkplugin 進行**分割。而 webpack4 之後就可以使用內建的 optimization.splitchunks 進行**分割。**分割的目的就是為了將一些不常更改的第三方庫單獨分離出來。
第二步:快取,使用 hard-source-webpack-plugin 外掛程式。
const hardsourcewebpackplugin =
require
('hard-source-webpack-plugin'
)plugins:
[new
hardsourcewebpackplugin()
]
以上配置中使用的是 hard-source-webpack-plugin 進行模組快取。這樣只有在第一次打包的時候花費的時間會長一些,但是從第二次之後,模組已經被快取到 node_modules/.cache/hard-source 目錄下,不會被打包進來,大大節省打包時間。
在 webpack 4 之前抽離 css 的外掛程式是 extract-text-webpack-plugin 。之後採用的是 mini-css-extract-plugin 外掛程式。其作用是用 js 中將 css 單獨抽離出來,並行載入,可以提公升載入速度。
配置如下:
const minics***tractplugin=
require
('mini-css-extract-plugin');
plugins:
[// 提取單獨的 css
newminics***tractplugin()
,]
module:,]
},plugins:
[new()
]
使用 dns 載入靜態資料會比較快,同時也可以減小公共模組的體積。
""
>
<
/script>
<
!-- 引入vue-router --
>
"">
<
/script>
<
!-- 引入元件庫 --
>
"">
<
/script>
<
!-- 引入樣式 --
>
"" rel=
"stylesheet"
>
空間維度指的是通過對 css、js 等靜態資源進行壓縮以減少資源體積。
optimize-css-assets-webpack-plugin 外掛程式主要是用來壓縮 css 檔案的。
配置如下:
const optimizecssplugin =
require
('optimize-css-assets-webpack-plugin');
plugins:
[new
optimizecssplugin(}
}),]
在 webpack 4 之前採用的 js 壓縮外掛程式是 uglifyjs-webpack-plugin 。之後採用的是 terser-webpack-plugin 外掛程式。其配置方式如出一轍。
uglifyjs-webpack-plugin 配置如下:
const uglifyjsplugin =
require
('uglifyjs-webpack-plugin');
plugins:
[new
uglifyjsplugin(}
, sourcemap:
false
, parallel:
true
//是否開啟多執行緒})
,]
terser-webpack-plugin 配置如下:
const terserplugin =
require
('terser-webpack-plugin');
plugins:
[new
terserplugin(}
, sourcemap:
false
, parallel:
true
//是否開啟多執行緒})
,]
可以看出他們的區別就在於 uglifyoptions 物件與 terseroptions 物件有所不同。
compression-webpack-plugin 外掛程式可以壓縮選擇的型別檔案,其採用的是 gzip 格式進行壓縮。
配置如下:
const compressionwebpackplugin =
require
('compression-webpack-plugin');
plugins:
[new
compressionwebpackplugin()
]
webpack 效能優化
構建速度 1 優化babel loader 開啟babel loader?cachedirectory,指定範圍 2 ignoreplugin 比如一些外掛程式,預設含有多語言檔案,比如moment.js new webpackignoreplugin locale,moment 去掉所有語言包 然...
Webpack效能優化
babel loader 轉換es6 es7等 js新特性語法。css loader 支援.css檔案的載入和解析 轉換成commonjs物件 style loader 將樣式通過 標籤插入到head中 less loader 將less檔案轉換成 cssts loader 將ts轉換成 jsfil...
Webpack效能優化
在使用webpack打包的時候,當我們的專案工程越來越大的時候就會出現打包的時間越來越長,這個時候需要對打包資源進行一系列的優化。對於 loader 來說,影響打包效率首當其衝必屬 babel 了。因為 babel 會將 轉為字串生成 ast,然後對 ast 繼續進行轉變最後再生成新的 專案越大,轉...