react配置webpack-bundle-analyzer項(xiàng)目優(yōu)化踩坑記錄
react配置webpack-bundle-analyzer項(xiàng)目優(yōu)化踩坑
webpack-bundle-analyzer是一款神奇。能分析項(xiàng)目中依賴包的大小,從而讓開發(fā)者能有針對(duì)性的進(jìn)行優(yōu)化的webpack插件
步驟:
(1)安裝 cnpm i webpack-bundle-analyzer --save-dev
(2) 在config文件夾中找到webpack.config.js,進(jìn)行如下操作


特別注意這里new BundleAnalyzerPlugin的時(shí)候要找準(zhǔn)位置;和module參數(shù)同級(jí)的plugins;[]才是配置plugin的地方
這樣我們?cè)趎pm run build的時(shí)候?yàn)g覽器會(huì)自動(dòng)打開9090端口的一個(gè)頁面顯示當(dāng)前依賴包的各種大小拼圖

ps:
vue中配置改插件步驟:(以vuecli3為例。)
(1) 安裝 cnpm install webpack-bundle-analyzer -D
(2)在vue.config.js文件配置選項(xiàng):
const?BundleAnalyzerPlugin?=?require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports={
????chainWebpack:config=>{
????????if?(process.env.use_analyzer)?{?????//?分析
????????????config.plugin("BundleAnalyzerPlugin").use(BundleAnalyzerPlugin)
????????}
????},
????pluginOptions:{
????}
}(3) 安裝npm安裝cross-env,(windows不支持xxx=xxx寫法)
(4)配置package.json
"scripts":?{
????"serve":?"vue-cli-service?serve",
????"build":?"cross-env?use_analyzer=true?vue-cli-service?build",
????"lint":?"vue-cli-service?lint",
????"analyzer":?"cross-env?use_analyzer=true?npm?run?build"
??},如果希望在打包的時(shí)候顯示。則在build命令里配置cross-env use_analyzer=true即可。
如果希望單獨(dú)設(shè)置一個(gè)命令用來顯示模塊大小,可以重新配置,如上 "analyzer": "cross-env use_analyzer=true npm run build"。
key值可以隨便取。
webpack-bundle-analyzer的使用
安裝
npm install --save-dev webpack-bundle-analyzer
代碼:(在umi項(xiàng)目中config.ts的配置)
import {BundleAnalyzerPlugin} from 'webpack-bundle-analyzer';
const chainWebpack = (config: any) => {
? config.plugin(BundleAnalyzerPlugin).use(BundleAnalyzerPlugin);
};使用
npm run build
運(yùn)行打包命令(運(yùn)行dev或者start也可以),webpack會(huì)自動(dòng)在瀏覽器中打開一個(gè)可視化分析工具。
可以在這個(gè)工具中查看模塊及其大小,識(shí)別哪些模塊占用了較多的空間。
可視化工具欄詳解
1. Treemap sizes:
是指webpack-bundle-analyzer生成的包大小分析圖中,用于展示不同模塊、chunk或者資源在打包后的大小占比情況的矩形圖(treemap)。
在這個(gè)圖中,每個(gè)矩形的大小代表了對(duì)應(yīng)模塊、chunk或者資源的大小,而顏色則表示該模塊、chunk或者資源的類型。
其中,Stat代表源代碼的大小,即未壓縮的大??;Parsed代表解析后的代碼大小,即應(yīng)用了webpack的優(yōu)化后的大小,也就是我們常說的“打包后的大小”;Gzipped則代表經(jīng)過gzip壓縮后的大小,也就是實(shí)際傳輸?shù)娇蛻舳说拇笮 ?/p>
因此,通常情況下,我們更關(guān)注Parsed和Gzipped的大小,因?yàn)樗鼈冎苯佑绊懥藢?shí)際使用的流量和加載時(shí)間。而Stat的大小則可以用來衡量源代碼的復(fù)雜程度和可維護(hù)性等因素。
2. Filter to initial chunks
它的作用是將分析圖中的模塊、chunk或者資源,篩選出與初始頁面加載有關(guān)的模塊和chunk,并將其他模塊和chunk過濾掉。這樣可以讓你更加清晰地了解初始頁面加載所需的代碼和資源,以幫助你進(jìn)行性能優(yōu)化。
需要注意的是,"Filter to initial chunks"選項(xiàng)可能會(huì)過濾掉一些與初始頁面加載無直接關(guān)系的代碼,比如異步加載的代碼或者按需加載的組件等。如果你需要查看全部的代碼和資源,可以將這個(gè)選項(xiàng)禁用。
3. Search modules
它的作用是在分析圖中快速查找模塊或者資源,并高亮顯示匹配的矩形。
使用"Search modules"功能進(jìn)行查找時(shí),你需要在搜索框中輸入要查找的模塊或者資源的名稱,然后點(diǎn)擊搜索按鈕。如果搜索框中的關(guān)鍵字匹配了分析圖中的某個(gè)模塊或者資源的名稱,那么匹配的矩形將被高亮顯示出來。如果搜索框中的關(guān)鍵字沒有匹配到任何模塊或者資源,分析圖不會(huì)發(fā)生變化。
需要注意的是,"Search modules"功能只能查找模塊或者資源的名稱,無法查找模塊或者資源的其他屬性,如大小、依賴關(guān)系等。此外,在大型的分析圖中,"Search modules"功能可能會(huì)比較慢,因?yàn)樾枰闅v所有的模塊或者資源名稱進(jìn)行匹配。因此,建議在使用"Search modules"功能時(shí),盡量輸入準(zhǔn)確的關(guān)鍵字,以提高搜索速度和準(zhǔn)確性。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
采用React編寫小程序的Remax框架的編譯流程解析(推薦)
這篇文章主要介紹了采用React編寫小程序的Remax框架的編譯流程解析(推薦),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
React函數(shù)式組件Hook中的useEffect函數(shù)的詳細(xì)解析
useEffect是react v16.8新引入的特性。我們可以把useEffect hook看作是componentDidMount、componentDidUpdate、componentWillUnmounrt三個(gè)函數(shù)的組合2022-10-10
react-native滑動(dòng)吸頂效果的實(shí)現(xiàn)過程
這篇文章主要給大家介紹了關(guān)于react-native滑動(dòng)吸頂效果的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用react-native具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
react?umi?刷新或關(guān)閉瀏覽器時(shí)清除localStorage方式
這篇文章主要介紹了react?umi?刷新或關(guān)閉瀏覽器時(shí)清除localStorage方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
React+TS+IntersectionObserver實(shí)現(xiàn)視頻懶加載和自動(dòng)播放功能
通過本文的介紹,我們學(xué)習(xí)了如何使用 React + TypeScript 和 IntersectionObserver API 來實(shí)現(xiàn)一個(gè)視頻播放控制組件,該組件具有懶加載功能,只有在用戶滾動(dòng)頁面且視頻進(jìn)入視口時(shí)才開始下載視頻資源,需要的朋友可以參考下2023-04-04
react實(shí)現(xiàn)列表滾動(dòng)組件功能
在開發(fā)項(xiàng)目的時(shí)候,從服務(wù)端獲取到數(shù)據(jù)列表后,展示給用戶看,需要實(shí)現(xiàn)數(shù)據(jù)自動(dòng)滾動(dòng)效果,怎么實(shí)現(xiàn)呢,下面小編給大家分享react實(shí)現(xiàn)列表滾動(dòng)組件功能實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧2023-09-09
React中setTimeout獲取不到最新State值的原因及解決方案
在 React 開發(fā)中,我們常常需要在異步操作中訪問組件的 State,然而,由于 React 的閉包機(jī)制和異步更新特性,setTimeout?中可能會(huì)獲取到過時(shí)的 State 值,本文將深入解析這一現(xiàn)象的原因,并提供多種解決方案,需要的朋友可以參考下2025-10-10
React實(shí)現(xiàn)類似于Vue中的插槽的項(xiàng)目實(shí)踐
本文主要介紹了React實(shí)現(xiàn)類似于Vue中的插槽的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05

