news 2026/5/19 6:35:03

Webpack优化实战:从配置到性能调优

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Webpack优化实战:从配置到性能调优

Webpack优化实战:从配置到性能调优

大家好,我是蔓蔓。在大厂工作时,我负责过多个大型项目的Webpack配置和优化。今天我来和大家分享Webpack优化的实战技巧。

基础优化

合理配置mode

// webpack.config.js module.exports = { mode: process.env.NODE_ENV === 'production' ? 'production' : 'development' };

优化resolve配置

const path = require('path'); module.exports = { resolve: { // 配置路径别名 alias: { '@': path.resolve(__dirname, 'src'), '@components': path.resolve(__dirname, 'src/components'), '@utils': path.resolve(__dirname, 'src/utils') }, // 减少文件查找范围 extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'], // 配置模块查找路径 modules: [path.resolve(__dirname, 'node_modules')] } };

代码分割

入口分割

module.exports = { entry: { main: './src/main.js', vendor: ['react', 'react-dom', 'lodash'] }, optimization: { splitChunks: { chunks: 'all', cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' }, common: { name: 'common', minChunks: 2, chunks: 'all', priority: -10, reuseExistingChunk: true } } } } };

动态导入

// 按需加载组件 const Home = () => import(/* webpackChunkName: "home" */ './pages/Home'); const About = () => import(/* webpackChunkName: "about" */ './pages/About'); // 路由懒加载 const routes = [ { path: '/', component: Home }, { path: '/about', component: About } ];

压缩优化

代码压缩

const TerserPlugin = require('terser-webpack-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); module.exports = { optimization: { minimizer: [ new TerserPlugin({ terserOptions: { compress: { drop_console: true, drop_debugger: true } } }), new CssMinimizerPlugin() ] } };

资源压缩

const CompressionPlugin = require('compression-webpack-plugin'); module.exports = { plugins: [ new CompressionPlugin({ algorithm: 'gzip', threshold: 8192, // 超过8KB的文件才压缩 minRatio: 0.8 // 压缩率低于80%才压缩 }) ] };

缓存策略

文件名哈希

module.exports = { output: { filename: '[name].[contenthash].js', chunkFilename: '[name].[contenthash].chunk.js' } };

模块缓存

const HardSourceWebpackPlugin = require('hard-source-webpack-plugin'); module.exports = { plugins: [ new HardSourceWebpackPlugin() ] };

性能监控

速度分析

const SpeedMeasurePlugin = require('speed-measure-webpack-plugin'); const smp = new SpeedMeasurePlugin(); module.exports = smp.wrap({ // webpack配置 });

体积分析

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; module.exports = { plugins: [ new BundleAnalyzerPlugin() ] };

进阶优化

Tree Shaking

module.exports = { optimization: { usedExports: true } }; // package.json { "sideEffects": false }

Scope Hoisting

module.exports = { optimization: { concatenateModules: true } };

懒加载图片

// 使用IntersectionObserver const lazyImages = document.querySelectorAll('img[data-src]'); const imageObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; imageObserver.unobserve(img); } }); }); lazyImages.forEach(img => imageObserver.observe(img));

总结

Webpack优化是一个持续的过程,需要结合项目实际情况进行:

  1. 合理配置代码分割和懒加载
  2. 使用压缩和缓存策略
  3. 监控构建速度和包体积
  4. 利用Tree Shaking和Scope Hoisting

技术应当有温度,优化后的构建能提升开发和用户体验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 6:33:04

Linux Ext 调度器的 enqueue/dequeue:自定义任务入队与出队

简介在传统 Linux 内核调度架构中,CFS 公平调度、RT 实时调度、Deadline 硬实时调度均为内核静态固化调度逻辑,开发者无法在内核运行态灵活修改任务排队规则、队列组织形式与调度遴选策略。一旦业务场景出现定制化调度诉求,例如业务进程按优先…

作者头像 李华
网站建设 2026/5/19 6:26:36

OpenCV阈值分割算法怎么选?一张图看懂直方图法、熵算法、Otsu的适用场景

OpenCV阈值分割算法实战指南:从直方图到自适应阈值的场景化选择 图像分割中的阈值选择困境 第一次接触OpenCV进行图像处理时,我面对各种阈值分割算法完全不知所措。直方图技术法、熵算法、Otsu、自适应阈值...每个算法文档都声称自己是最佳选择&#xff…

作者头像 李华
网站建设 2026/5/19 6:26:11

从零到一:在ESP32-S3上部署自定义目标检测模型实战

1. 为什么选择ESP32-S3做目标检测? ESP32-S3这颗芯片最近在边缘计算领域火得不行,我去年用它做了个智能门铃项目,实测下来发现它确实是个性价比怪兽。相比前代ESP32,S3版本的双核Xtensa LX7处理器主频飙升到240MHz,还集…

作者头像 李华