針對vue項目的webpack優化攻略

一、開發階段優化

1. 熱更新加速(HMR)
// vue.config.js
module.exports = {devServer: {hot: true,  // 開啟熱更新injectClient: true, // 自動注入HMR客戶端watchOptions: {ignored: /node_modules/,  // 忽略node_modules變化aggregateTimeout: 300      // 防抖延遲}}
}

效果:修改組件代碼時,僅更新當前組件而非整個頁面。

2. 減少Loader處理范圍
// 針對babel-loader優化
{test: /\.js$/,include: [ // 明確處理范圍path.resolve(__dirname, 'src'),path.resolve(__dirname, 'node_modules/vue-awesome')],use: ['babel-loader?cacheDirectory'] // 啟用緩存
}

二、構建速度優化

1. 多線程并行處理
const ThreadLoader = require('thread-loader');// 預熱線程池
ThreadLoader.warmup({workers: 2,workerParallelJobs: 50
}, ['babel-loader']);// 配置
{test: /\.js$/,use: [{loader: 'thread-loader',options: { workers: 2 }},'babel-loader']
}
2. 緩存策略
// 持久化緩存(Webpack5+)
cache: {type: 'filesystem',buildDependencies: {config: [__filename] // 配置文件變化時緩存失效}
}

三、產物體積優化

1. Tree Shaking優化
// package.json 標記副作用文件
{"sideEffects": ["*.css","*.vue"  // Vue單文件組件默認有副作用]
}// 確保使用ES模塊導入
import { Button } from 'element-ui'  // ? 按需加載
import ElementUI from 'element-ui'   // ? 全量引入
2. 按需加載第三方庫
// 以Element-UI為例
const components = ['ElButton', 'ElInput'];
const plugins = ['ElLoading'];plugins.forEach(plugin => {app.use(require(`element-ui/lib/${plugin.toLowerCase()}`));
});
3. 圖片壓縮(Webpack5+)
{test: /\.(png|jpe?g|webp)$/,type: 'asset',parser: {dataUrlCondition: {maxSize: 8 * 1024 // 8KB以下轉base64}},use: [{loader: 'image-webpack-loader',options: {mozjpeg: { quality: 65 },webp: { quality: 75 }}}]
}

四、Vue專項優化

1. 模板預編譯
// vue-loader配置
{loader: 'vue-loader',options: {compilerOptions: {whitespace: 'condense'  // 壓縮模板空白字符},reactivityTransform: true // 啟用響應性語法糖}
}
2. 異步組件分割
// 路由配置示例
const UserDetails = () => import(/* webpackChunkName: "user" */ './views/UserDetails.vue'
);
3. 運行時版本構建
// vue.config.js
module.exports = {configureWebpack: {resolve: {alias: {'vue$': 'vue/dist/vue.runtime.esm-bundler.js' // 使用無編譯器版本}}}
}

效果:減少約30%的Vue核心庫體積。


五、高級優化方案

1. 模塊聯邦(微前端場景)
// 模塊提供方配置
new ModuleFederationPlugin({name: 'app1',filename: 'remoteEntry.js',exposes: {'./Button': './src/components/Button.vue'}
});// 消費方配置
remotes: {app1: 'app1@http://localhost:3001/remoteEntry.js'
}
2. Gzip壓縮(需配合Nginx)
const CompressionPlugin = require('compression-webpack-plugin');new CompressionPlugin({test: /\.(js|css|html|svg)$/,threshold: 10240, // 10KB以上文件壓縮algorithm: 'gzip'
})

優化效果對比

優化項構建時間產物體積首屏加載
基礎配置45s4.2MB2.8s
多線程+緩存22s (-50%)--
Tree Shaking+按需加載-2.1MB (-50%)1.5s
Gzip壓縮-1.3MB (-70%)0.9s

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82448.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82448.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82448.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BTC官網關注巨鯨12億美元平倉,XBIT去中心化交易平臺表現穩定

在全球加密貨幣市場波動加劇的背景下,2025年5月25日傳出重磅消息。據今日最新國際報道,知名巨鯨James Wynn完全平倉價值12億美元的BTC多頭倉位,整體盈利約845萬美元,此舉引發市場廣泛關注。與此同時,收益型穩定幣市場迎…

在WPF中添加動畫背景

在WPF中添加動畫背景 在WPF中創建動畫背景可以大大增強應用程序的視覺效果。以下是幾種實現動畫背景的方法&#xff1a; 方法1&#xff1a;使用動畫ImageBrush&#xff08;圖片輪播&#xff09; <Window x:Class"AnimatedBackground.MainWindow"xmlns"htt…

單點擊登錄sso實現

一、單點登錄&#xff08;SSO&#xff09;是什么&#xff1f; 核心定義 單點登錄&#xff08;Single Sign-On&#xff0c;SSO&#xff09;是一種身份認證解決方案&#xff0c;允許用戶通過一次登錄訪問多個相互信任的應用系統。其核心邏輯是統一認證中心與分布式會話管理&…

JavaWebsocket-demo

Websocket客戶端 pom依賴 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.4.0</version></dependency>客戶端代碼片段 Component Slf4j public class PositionAlarmL…

Java Collection(集合) 接口

Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一組接口和類&#xff0c;以實現各種數據結構和算法。 以下是關于 Java 集合的核心內容說明&#xff1a; /*** Java Collection Framework 說明&#xff1a;** 在 Java 中&#xff0c;集合&#xff08;Collec…

讓MySQL更快:EXPLAIN語句詳盡解析

前言 在數據庫性能調優中&#xff0c;SQL 查詢的執行效率是影響系統整體性能的關鍵因素之一。MySQL 提供了強大的工具——EXPLAIN 語句&#xff0c;幫助開發者和數據庫管理員深入分析查詢的執行計劃&#xff0c;從而發現潛在的性能瓶頸并進行針對性優化。 EXPLAIN 語句能夠模…

Java基礎 Day20

一、HashSet 集合類 1、簡介 HashSet 集合底層采取哈希表存儲數據 底層是HashMap 不能使存取有序 JDK8之前的哈希表是數組和鏈表&#xff0c;頭插法 JDK8之后的哈希表是數組、鏈表和紅黑樹&#xff0c;尾插法 2、存儲元素 &#xff08;1&#xff09;如果要保證元素的唯…

2505C++,32位轉64位

原文 假設有個想要將一個32位值傳遞給一個帶64位值的函數的函數.你不關心高32位的內容,因為該值是傳遞給回調函數的直通值,回調函數會把它截斷為32位值. 因此,你都擔心編譯器一般生成的將32位值擴展到64位值的那條指令的性能影響. 我懷疑這條指令不是程序中的性能瓶頸. 我想出…

光伏電站及時巡檢:守護清潔能源的“生命線”

在“雙碳”目標驅動下&#xff0c;光伏電站作為清潔能源的主力軍&#xff0c;正以年均20%以上的裝機增速重塑全球能源格局。然而&#xff0c;這些遍布荒漠、屋頂的“光伏矩陣”并非一勞永逸的能源提款機&#xff0c;其穩定運行高度依賴精細化的巡檢維護。山東棗莊觸電事故、衢州…

C++初階-list的使用2

目錄 1.std::list::splice的使用 2.std::list::remove和std::list::remove_if的使用 2.1remove_if函數的簡單介紹 基本用法 函數原型 使用函數對象作為謂詞 使用普通函數作為謂詞 注意事項 復雜對象示例 2.2remove與remove_if的簡單使用 3.std::list::unique的使用 …

OpenHarmony平臺驅動使用(一),ADC

OpenHarmony平臺驅動使用&#xff08;一&#xff09; ADC 概述 功能簡介 ADC&#xff08;Analog to Digital Converter&#xff09;&#xff0c;即模擬-數字轉換器&#xff0c;可將模擬信號轉換成對應的數字信號&#xff0c;便于存儲與計算等操作。除電源線和地線之外&#…

CSS【詳解】彈性布局 flex

適用場景 一維&#xff08;行或列&#xff09;布局 基本概念 包裹所有被布局元素的父元素為容器 所有被布局的元素為項目 項目的排列方向&#xff08;垂直/水平&#xff09;為主軸 與主軸垂直的方向交交叉軸 容器上啟用 flex 布局 將容器的 display 樣式設置為 flex 或 i…

基于MATLAB實現傳統譜減法以及兩種改進的譜減法(增益函數譜減法、多帶譜減法)的語音增強

基于MATLAB實現傳統譜減法以及兩種改進的譜減法&#xff08;增益函數譜減法、多帶譜減法&#xff09;的語音增強代碼示例&#xff1a; 傳統譜減法 function enhanced traditional_spectral_subtraction(noisy, fs, wlen, inc, NIS, a, b)% 參數說明&#xff1a;% noisy - 帶…

symbol【ES6】

你一閉眼世界就黑了&#xff0c;你不是主角是什么&#xff1f; 目錄 什么是Symbol&#xff1f;?Symbol特點?&#xff1a;創建方法&#xff1a;注意點&#xff1a;不能進行運算&#xff1a;顯示調用toString() --沒有意義隱式轉換boolean 如果屬性名沖突了怎么辦&#xff1f;o…

LeetCode 649. Dota2 參議院 java題解

https://leetcode.cn/problems/dota2-senate/description/ 貪心。不會寫。 class Solution {public String predictPartyVictory(String senate) {boolean rtrue,dtrue;int flag0;//flag>0,d前面有r;flag<0,r前面有dchar[] senatessenate.toCharArray();//每一輪while(r…

機器學習第二十二講:感知機 → 模仿大腦神經元的開關系統

機器學習第二十二講&#xff1a;感知機 → 模仿大腦神經元的開關系統 資料取自《零基礎學機器學習》。 查看總目錄&#xff1a;學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章&#xff1a;DeepSeek R1本地與線上滿血版部署&#xff1a;超詳細手把手指南 感知機詳解…

maven快速上手

之前我們項目如果要用到其他額外的jar包&#xff0c;需要自己去官網下載并且導入。但是有maven后&#xff0c;直接在maven的pom.xml文件里用代碼配置即可&#xff0c;配置好后maven會自動幫我們聯網下載并且會自動導入該jar包 在右邊的maven中&#xff0c;我們可以看到下載安裝…

科學養生指南:解鎖健康生活密碼

健康是人生最寶貴的財富&#xff0c;在快節奏的現代生活中&#xff0c;科學養生成為保持良好狀態的關鍵。遵循現代醫學與營養學的研究成果&#xff0c;無需依賴傳統中醫理論&#xff0c;我們也能找到適合自己的養生之道。? 均衡飲食是健康的基石。現代營養學強調 “食物多樣&…

Qt狀態機QStateMachine

QStateMachine QState 提供了一種強大且靈活的方式來表示狀態機中的狀態&#xff0c;通過與狀態機類(QStateMachine)和轉換類(QSignalTransition&#xff0c; QEventTransition)結合&#xff0c;可以實現復雜的狀態邏輯和用戶交互。合理使用嵌套狀態機、信號轉換、動作與動畫、…

C++八股 —— 原子操作

文章目錄 1. 什么是原子操作2. 原子操作的特點3. 原子操作的底層原理4. 內存序內存屏障 5. 原子操作和互斥鎖的對比6. 常用的原子操作7. 相關問題討論 參考&#xff1a; C atomic 原子操作_c 原子操作-CSDN博客DeepSeek 1. 什么是原子操作 原子操作&#xff08;Atomic Opera…