webpack优化方法
以下是Webpack优化的系统性策略,涵盖构建速度、输出体积、缓存优化等多个维度,配置示例和原理分析:
一、构建速度优化
1. 缩小文件搜索范围
module.exports = {resolve: {// 明确第三方模块的路径modules: [path.resolve('node_modules')],// 减少后缀尝试extensions: ['.js', '.jsx'], // 避免默认的递归查找mainFiles: ['index']},module: {rules: [{test: /\.js$/,// 排除node_modulesexclude: /node_modules/,loader: 'babel-loader'}]}
}
2. 多线程加速
- thread-loader(适合耗时loader):
rules: [{test: /\.js$/,use: [{loader: 'thread-loader',options: { workers: 3 }},'babel-loader'] }]
3. 缓存机制
- babel-loader缓存:
loader: 'babel-loader', options: { cacheDirectory: true }
- hard-source-webpack-plugin(模块级缓存):
new HardSourceWebpackPlugin()
二、输出体积优化
1. Tree Shaking
- 前提条件:
- 使用ES6模块语法(
import/export
) - 在
package.json
中设置"sideEffects": false
- 使用ES6模块语法(
- 生产模式自动启用:
mode: 'production'
2. 代码分割(Code Splitting)
optimization: {splitChunks: {chunks: 'all',cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,name: 'vendors'}}},runtimeChunk: 'single' // 提取runtime代码
}
3. 图片优化
rules: [{test: /\.(png|jpg)$/,use: [{loader: 'url-loader',options: {limit: 8192, // 小于8KB转base64name: '[name].[hash:8].[ext]'}}]
}]
三、长效缓存策略
1. 文件哈希命名
output: {filename: '[name].[contenthash:8].js',chunkFilename: '[name].[contenthash:8].chunk.js'
}
2. 模块ID稳定
optimization: {moduleIds: 'deterministic' // 避免module.id变化
}
3. 动态导入(Lazy Loading)
// React动态加载组件
const LazyComponent = React.lazy(() => import('./LazyComponent'));
四、高级优化手段
1. DLL预编译(适合大型项目)
// webpack.dll.js
module.exports = {entry: {react: ['react', 'react-dom']},output: {filename: '[name].dll.js',path: path.join(__dirname, 'dll'),library: '[name]_[hash]'},plugins: [new webpack.DllPlugin({name: '[name]_[hash]',path: path.join(__dirname, 'dll/manifest.json')})]
};// 主配置中引用
new webpack.DllReferencePlugin({manifest: require('./dll/manifest.json')
})
2. 可视化分析
- 生成分析报告:
webpack --profile --json > stats.json
- 使用Webpack Bundle Analyzer:
new BundleAnalyzerPlugin()
五、开发体验优化
1. 热更新加速
devServer: {hot: true, // 启用HMR// 关闭全量构建的校验watchOptions: {aggregateTimeout: 500,ignored: /node_modules/}
}
2. Devtool选择
// 开发环境
devtool: 'cheap-module-eval-source-map',
// 生产环境(如需调试)
devtool: 'source-map'
优化效果对比示例
优化手段 | 构建时间减少 | 产物体积减少 |
---|---|---|
多线程+缓存 | 40%~60% | - |
Tree Shaking | - | 15%~30% |
Code Splitting | - | 首屏减少50%+ |
相关文章:
webpack优化方法
以下是Webpack优化的系统性策略,涵盖构建速度、输出体积、缓存优化等多个维度,配置示例和原理分析: 一、构建速度优化 1. 缩小文件搜索范围 module.exports {resolve: {// 明确第三方模块的路径modules: [path.resolve(node_modules)],// …...

STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09
STM32 Keil工程搭建 (手动搭建)流程 觉得麻烦跳转到最底部看总配置图 1.获取官方标准外设函数库 内部结构如下: 文件夹功能分别为 图标(用不上)库函数(重点) Libraries/ ├── CMSIS/ # ARM Cortex-M Microcontroller Software Interface Standard…...
MyBatis 框架使用与 Spring 集成时的使用
MyBatis 创建项目mybatis项目,首先需要使用maven导入mybatis库 poml.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema…...

OpenGL Chan视频学习-7 Writing a Shader inOpenGL
bilibili视频链接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站: docs.gl 说明: 1.之后就不再整理具体函数了,网站直接翻译会更直观也会…...

顶会新方向:卡尔曼滤波+目标检测
卡尔曼虑波+目标检测创新结合,新作准确率突破100%! 一个有前景且好发论文的方向:卡尔曼滤波+目标检测! 这种创新结合,得到学术界的广泛认可,多篇成果陆续登上顶会顶刊。例如无人机竞速系统 Swift,登上nat…...
数据库相关问题
1.保留字 1.1错误案例(2025/5/27) 报错: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near condition, sell…...

一起学数据结构和算法(二)| 数组(线性结构)
数组(Array) 数组是最基础的数据结构,在内存中连续存储,支持随机访问。适用于需要频繁按索引访问元素的场景。 简介 数组是一种线性结构,将相同类型的元素存储在连续的内存空间中。每个元素通过其索引值(数…...

Linux基本指令篇 —— touch指令
touch是Linux和Unix系统中一个非常基础但实用的命令,主要用于操作文件的时间戳和创建空文件。下面我将详细介绍这个命令的用法和功能。 目录 一、基本功能 1. 创建空文件 2. 同时创建多个文件 3. 创建带有空格的文件名(需要使用引号) 二、…...

【后端高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理
一、延迟消息的核心价值与Kafka的局限性 在分布式系统中,延迟消息是实现异步延迟任务的核心能力,广泛应用于订单超时取消、库存自动释放、消息重试等场景。 然而,Apache Kafka作为高吞吐的分布式消息队列,原生并不支持延迟消息功能,需通过业务层或中间层逻辑实现。 1.1…...

Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具
目录 一、安装 MongoDB 社区版 1、下载 MongoDB 2、配置环境变量 3、配置数据和日志目录 4、启动MongoDB服务 5、使用配置文件启动 6、验证服务运行 二、MongoDB可视化工具MongoDB Compass 一、安装 MongoDB 社区版 1、下载 MongoDB 大家可以直接在官方文档下安装Mo…...

城市地下“隐形卫士”:激光甲烷传感器如何保障燃气安全?
城市“生命线”面临的安全挑战 城市地下管网如同人体的“血管”和“神经”,承载着燃气、供水、电力、通信等重要功能,一旦发生泄漏或爆炸,将严重影响城市运行和居民安全。然而,由于管线老化、违规施工、监管困难等问题࿰…...

MySQL推出全新Hypergraph优化器,正式进军OLAP领域!
在刚刚过去的 MySQL Summit 2025 大会上,Oracle 发布了一个用于 MySQL 的全新 Hypergraph(超图)优化器,能够为复杂的多表查询生成更好的执行计划,从而优化查询性能。 这个功能目前只在 MySQL HeatWave 云数据库中提供&…...

飞牛fnNAS手机相册备份及AI搜图
目录 一、相册安装应用 二、手机开启自动备份 三、开始备份 四、照片检索 五、AI搜图设置 六、AI搜图测试 七、照片传递 现代的手机,已经成为我们最亲密的“伙伴”。自从手机拍照性能提升后,手机已经完全取代了简单的卡片相机,而且与入门级“单反”相机发起了挑战。在…...

消费类,小家电产品如何做Type-C PD快充快速充电
随着快充技术的快速发展现在市场上的产品接口都在逐渐转为Type-C接口,Type-C可以支持最大20V100W的功率。未来Type-C大概会变成最通用的接口,而你的产品却还是还在用其他的接口必然会被淘汰, 而要使小家电用到PD快充,就需要使用到Type-C快充诱…...

连接表、视图和存储过程
1. 视图 1.1. 视图的概念 视图(View):虚拟表,本身不存储数据,而是封装了一个 SQL 查询的结果集。 用途: 只显示部分数据,提高数据访问的安全性。简化复杂查询,提高复用性和可维护…...
人工智能赋能教育:重塑学习生态,开启智慧未来
在科技浪潮风起云涌的当下,人工智能(AI)如同一颗璀璨的新星,正以前所未有的速度和深度融入社会生活的各个领域。教育,作为塑造未来、传承文明的核心领域,自然也未能置身事外。人工智能与教育的结合…...

银河麒麟V10×R²AIN SUITE:用AI重构安全,以国产化生态定义智能未来
前言 银河麒麟是由国防科技大学研发、现由麒麟软件运营的国产操作系统,旨在打破国外技术垄断,保障国家信息安全。自2002年国家“863计划”启动以来,历经技术迭代与生态整合,现为国产操作系统领军品牌。其应用覆盖党政、国防、能源…...

JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML和CSS系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看ÿ…...

15.进程间通信(一)
一、进程间通信介绍 进程间通信目的: 数据传输:一个进程需要将它的数据发送给另⼀个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们…...

AI 数据采集实战指南:基于 Bright Data 快速获取招标讯息
AI 数据采集实战指南:基于Bright Data快速获取招标讯息 在招标行业中,快速、准确地获取招标公告、项目详情、投标截止日期和其他关键招标信息,是投标企业提高竞标成功率的核心竞争力。然而,招标信息往往分散在不同的平台和网页&a…...

cursor使用mcp
问题说明 mcp就相当于给AI安装了工具包,它可以调用获取接口文档,网页,数据库等,基本上所有的mcp都是node程序,少数需要python环境 使用说明 使用mcp-mysql举例,下面是配置json "mysql": {&qu…...

小白成长之路-计算机网络(四)
文章目录 前言一、网络连接查看1.netstat2.ss3.bond绑定3.1准备好这三个文件3.2添加bond配置文件3.3关闭网络图形化服务3.4重启 4.Linux下的抓包工具Wireshark 5、web压力测试工具6、路由追踪命令 二、[练习题](https://blog.csdn.net/m0_70730767/article/details/148262716?…...

【Agent】MLGym: A New Framework and Benchmark for Advancing AI Research Agents
arxiv: https://arxiv.org/pdf/2502.14499 简介 Meta 推出的 MLGym 框架及配套基准 MLGym-Bench,为评估和开发LLM Agent在 AI 研究任务中的表现提供了全新工具。作为首个基于 Gym 的机器学习任务环境,MLGym 支持强化学习等算法对代理的训练,…...
5.27 打卡
知识点回顾: Dataset类的__getitem__和__len__方法(本质是python的特殊方法)Dataloader类minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图片 import torch import torchvision from torchvision im…...

Web安全测试-文件上传绕过-DVWA
Web安全测试-文件上传绕过-DVWA 很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了。 我用…...
织梦dedecms arclist最新发布日期显示红色
织梦DedeCMS在当天发表的文章显示红色、添加new图标的问题,织梦模板网在以前的文章中已经发表过类似的文章,今天我们再来回顾和温习一下,主要增加了真正的当天显示红色,而不是24小时内的文章显示红色。 真正的“当天”显示红色&a…...

现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践
通过 数学计算 CSS mask 复合遮罩 实现的真正几何内凹效果: 背景是一张图片,用来证明中间的凹陷是透明的。 完整代码: app.js import FormPage from "./pages/formPage"; import "./App.css"; const App () > {re…...

【运维自动化-标准运维】如何实现在不同步骤间传递参数
当流程有多个步骤时,经常需要把前面某个个步骤处理的结果传递给下一个或后面的步骤使用(输出作为输入),这就是跨步骤传参的场景,标准运维通过特有的标记符号"<SOPS_VAR>key:value</SOPS_VAR> "来…...
STM32 UART通信实战指南:从原理到项目落地
STM32串口通信实战指南:从零开始手把手教你 前言:为什么串口这么重要? 在嵌入式开发中,串口就像设备的"嘴巴"和"耳朵"。无论是给单片机下达指令、读取传感器数据,还是让两个模块"对话"…...
基于stm32的 永磁同步电机二电平驱动控制系统设计
基于STM32的永磁同步电机(PMSM)二电平驱动控制系统设计方案: 系统架构 永磁同步电机二电平驱动控制系统主要由以下部分组成: STM32微控制器:作为控制核心,生成PWM信号并处理反馈数据。功率驱动电路:使用IGBT或MOSFET构成三相桥式逆变器,实现二电平驱动。电流采样电路:…...