沈阳微信网站/营业推广的概念
文章目录
- webpack 中 chunkHash 和 contentHash 的区别
- loader和plugin的区别?
- webpack 处理 image 是用哪个 loader,限制 image 大小的是...;
- webpack 如何优化打包速度
webpack 中 chunkHash 和 contentHash 的区别
主要从四方面来讲一下区别:1、hash的生成依据;2、影响范围;3、用途;4、限制。以及我们如何使用
- chunkHash:
- 生成依据:基于每个 chunk 的内容生成哈希值。
- 影响范围:同一个 chunk 内的所有模块发生变化时,chunkhash 会重新生成。
- 用途:适合用来区分不同的打包文件,比如入口文件(main.js)和依赖模块文件(vendor.js)。
- 限制:如果 chunk 中的非代码部分(比如引入的样式或其他模块)变化了,chunkhash 也会变化,不够精细。
output: {filename: '[name].[chunkhash].js',
},
场景问题:
假设你修改了项目中的 CSS 文件,但由于 CSS 和 JS 打包在同一个 chunk 中,chunkhash 会因为 CSS 的变化而导致 JS 文件的哈希值也发生变化,这可能会导致缓存失效。
- contenthash
- 生成依据:基于具体文件内容生成哈希值。
- 影响范围:仅在内容本身发生变化时,contenthash 才会重新生成。
- 用途:适用于精细化缓存管理,特别是 CSS 和 JS 文件分离的场景。
- 优势:修改 CSS 不会影响 JS 文件的哈希值,反之亦然。
示例:
output: {filename: '[name].[contenthash].js',
},
场景优点:
假设你对 CSS 文件进行了修改,只有 CSS 文件的哈希值会更新,而 JS 文件的哈希值不会变动,这样用户浏览器可以继续使用缓存的 JS 文件。
如何选择:
- 开发模式:一般直接使用hash(全局简单哈希值,生成快)
- 生产模式:
- 使用chunkhash 来管理js文件缓存
- 使用contenthash来管理css和其他静态文件的缓存
- 借助 MiniCssExtractPlugin将css抽离,并使用contenthash防止js和css哈希混淆
Webpack 配置参考:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {output: {filename: '[name].[chunkhash].js', // JS 使用 chunkhash},plugins: [new MiniCssExtractPlugin({filename: '[name].[contenthash].css', // CSS 使用 contenthash}),],
};
loader和plugin的区别?
webpack 处理 image 是用哪个 loader,限制 image 大小的是…;
在 Webpack 中,处理 图片(image) 通常使用 url-loader 或 file-loader,结合 asset 模式(Webpack 5 引入的新特性)更为常见。
- 图片处理 Loader
- url-loader
- 用于将图片转为 Base64 编码的 Data URL 形式,嵌入到 JavaScript 文件中。
- 优点:小图片可内嵌,减少 HTTP 请求。
- 限制:较大的图片内嵌会增加打包文件体积。
- file-loader
- 用于将图片作为 文件输出,并返回对应的路径。
- 优点:适合较大的图片文件,不会嵌入到 JS 中。
- 限制:需要额外的 HTTP 请求。
- Webpack 5 的 asset 模式
- 取代了传统的 url-loader 和 file-loader,统一处理静态资源。
- 提供两种自动选择方式:
- asset/resource:类似 file-loader,将文件输出为单独的文件。
- asset/inline:类似 url-loader,将文件内嵌为 Base64。
- asset:根据文件大小自动选择 resource 或 inline(默认阈值 8 KB)。
- asset/source:将文件内容作为字符串导入。
- 限制图片大小的配置
url-loader 示例
通过 limit 参数限制图片大小,超出限制的会作为文件处理,否则转为 Base64。
module.exports = {module: {rules: [{test: /\.(png|jpg|jpeg|gif|svg)$/i, // 处理图片文件use: [{loader: 'url-loader',options: {limit: 8192, // 限制大小为 8 KB,小于此值会转为 Base64name: '[name].[hash:8].[ext]', // 输出文件名outputPath: 'images', // 输出到 images 文件夹},},],},],},
};
Webpack 5 的 asset 模式
设置 asset 模式时,限制图片大小的方式是通过 parser.dataUrlCondition.maxSize 指定阈值(单位字节,默认 8 KB)。
module.exports = {module: {rules: [{test: /\.(png|jpg|jpeg|gif|svg)$/i, // 处理图片type: 'asset', // 根据大小自动选择 inline 或 resourceparser: {dataUrlCondition: {maxSize: 8192, // 超过 8 KB 则单独打包成文件},},generator: {filename: 'images/[name].[hash:8][ext]', // 输出路径和文件名},},],},
};
- 推荐使用
在 Webpack 5 中,建议直接使用 asset 模式,这样无需额外安装 url-loader 或 file-loader,而且配置更加简单灵活。
如果你有特殊的需求(比如区分非常小或非常大的文件处理方式),可以手动指定 type 为 asset/inline 或 asset/resource。
webpack 如何优化打包速度
- 减少文件搜索范围
- 优化 resolve 配置:
限制模块解析路径,减少解析时间。
resolve: {extensions: ['.js', '.jsx', '.json'], // 文件后缀范围alias: { '@': path.resolve(__dirname, 'src') }, // 路径别名modules: [path.resolve('node_modules')], // 仅在指定目录搜索模块
}
- 指定 include 和 exclude:
在 loader 中明确指定需要处理的范围。
module: {rules: [{test: /\.js$/,loader: 'babel-loader',include: path.resolve(__dirname, 'src'),exclude: /node_modules/,},],
},
- 缓存机制
开启持久化缓存:
Webpack 5 原生支持持久化缓存,能显著提升构建速度。
cache: {type: 'filesystem', // 使用文件缓存
},
Babel-loader 缓存:
配置 cacheDirectory 将 Babel 编译结果缓存到文件系统。
module: {rules: [{test: /\.js$/,loader: 'babel-loader',options: {cacheDirectory: true,},},],
},
- 多进程/多实例打包
- thread-loader:
开启多线程处理,适合较重的 loader。
module: {rules: [{test: /\.js$/,use: ['thread-loader', 'babel-loader'],},],
},
- 压缩优化
TerserPlugin:
配置并行压缩,默认在生产模式下启用。
optimization: {minimize: true,minimizer: [new TerserPlugin({parallel: true, // 多线程压缩}),],
},
- 减少文件体积
- 按需加载:
通过动态 import 实现代码分割,减少初始加载文件的体积。 - Tree Shaking:
移除无用代码,确保使用 ES Module。
复制代码
optimization: {usedExports: true, // 标记未使用的导出
},
- 开发模式下的优化
使用 source-map 的更快模式:
如 eval-source-map 或 cheap-module-source-map。
devtool: 'cheap-module-source-map',
使用 webpack-dev-server 提升本地开发效率:
devServer: {hot: true, // 热模块替换
},
- 减少构建体积
使用外部依赖 (externals):
将第三方库从打包中排除,通过 CDN 引入。
externals: {react: 'React','react-dom': 'ReactDOM',
},
- 减少依赖包:
删除无用的依赖。
使用体积更小的包(如 lodash-es 替代 lodash)。
- 分析和监控
使用打包分析工具:
如 webpack-bundle-analyzer,找到体积较大的模块优化。
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
plugins: [new BundleAnalyzerPlugin(),
]
相关文章:

webpack 题目
文章目录 webpack 中 chunkHash 和 contentHash 的区别loader和plugin的区别?webpack 处理 image 是用哪个 loader,限制 image 大小的是...;webpack 如何优化打包速度 webpack 中 chunkHash 和 contentHash 的区别 主要从四方面来讲一下区别&…...

【MySQL】视图详解
视图详解 一、视图的概念二、视图的常用操作2.1创建视图2.2查询视图2.3修改视图2.4 删除视图2.5向视图中插入数据 三、视图的检查选项3.1 cascaded(级联 )3.2 local(本地) 四、视图的作用 一、视图的概念 视图(View)是一种虚拟存…...

第一节:ORIN NX介绍与基于sdkmanager的镜像烧录(包含ubuntu文件系统/CUDA/OpenCV/cudnn/TensorRT)
ORIN NX技术参数 Orin NX版本对比 如上图所示,ORIN NX官方发布的版本有两个版本一个版本是70TOPS算力,DDR为8GB的版本低配版本,一个是100TOPS算法,DDR为16GB的高配版本。 Orin NX的外设框图 两个版本除了GPU和DDR的差距外,外设基本上没有区别,丰富的外设接口,后续开发…...

2024-12-04OpenCV视频处理基础
OpenCV视频处理基础 OpenCV的视频教学:https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中,cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频,或者从视频文件中读取帧。以下是如何使用…...

D89【python 接口自动化学习】- pytest基础用法
day89 pytest的setup,setdown详解 学习日期:20241205 学习目标:pytest基础用法 -- pytest的setup,setdown详解 学习笔记: setup、teardown详解 模块级 setup_module/teardown_module 开始于模块始末,生…...

七、docker registry
七、docker registry 7.1 了解Docker Registry 7.1.1 介绍 registry 用于保存docker 镜像,包括镜像的层次结构和元数据。启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保…...

FlightGear+MATLAB+飞行手柄实现实时飞控视景系统
文章目录 一、软件配置二、FlightGearMATLAB联合仿真第一步 复制文件第二步 新建文件夹第三步 打开demo第四步 demo说明第五步 打开Simulink第六步 连接FlightGear第七步 设置FlightGear第八步 生成FlightGear连接文件FlightGear的设置Network的设置File的设置生成.bat文件 第九…...

深入 Java 基础 XML:高级特性与最佳实践
在上一篇文章中,我们对 Java 基础 XML 有了一个初步的认识,了解了 XML 的基本结构以及在 Java 中常见的解析方式。今天,我们将进一步深入探讨 Java 与 XML 的结合,包括一些高级特性和最佳实践。 一、XML 命名空间 在复杂的 XML …...

【论文阅读】Fifty Years of the ISCA: A Data-Driven Retrospective
学习体会: ISCA会议近五十年文章分析, 了解论文热点方向, 处理器依旧是热点! AI和并行是大趋势, 做XPU相关目前来说还是热点~ 摘录自原文 摘录: 数据来源和分析方法: 作者收集了 ACM 数字图书馆中所有 ISCA 论文,并使用 DBLP、Google Schol…...

TVbox源贡献指南
欢迎各路大佬踊跃提PR,分享爬虫代码。 源码仓库地址 https://github.com/lushunming/AndroidCatVodSpider 快速开始 本工程是一个完整的AndroidStudio工程,请你用AS打开编辑。 工程调试完毕后要需要导出生成jar文件配合软件使用,执行根目…...

qt数据类型定义(包含签名)
先推荐一个处理markdown表格的网站,超级好用:markdown表格处理,我就是用这个表格处理的excel中的数据上传。 下表整理了数据类型的值范围、签名、qt如何定义等内容。 类型范围/子类型dbus签名qt支持的签名qt类型定义方式转换为variantint8(…...

docker逃逸总结
一、 检查是否在docker容器中 通过以下两个地方来判断 # 是否存在此文件 ls -al /.dockerenv# 在其中是否包含docker字符串 cat /proc/1/cgroup除了上面两种外还有其他方式判断,如检测mount、fdisk -l查看硬盘 、判断PID 1的进程名等也可用来辅助判断。 容器逃逸…...

MySql:表的操作
目录 创建表 查看创建表时的信息 查看表的结构描述 删除一张表 修改表 创建表 CREATE TABLE [IF NOT EXISTS] table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; field 表示列名 datatype 表示…...

LVGL9 开关控件 (lv_switch) 使用指南
文章目录 前言主体1. **控件概述**2. **控件的样式和组成部分**3. **使用控件**改变开关状态 4. **事件处理**5. **按键支持**6. **示例代码** 总结 前言 lv_switch 是 LittlevGL 提供的一个开关控件,外观类似一个小型滑块,常用于实现开关功能ÿ…...

fastadmin 登录退出忽略中间提示页面
背景 研究了一圈CMS,从fastadmin、easyadmin、buildadmin、onethink等等几乎所有的框架CMS,当然也包括若依。 最后,根据当前项目综合考虑,还是选择的fastadmin: 预算经济实惠、维护成本低;工期端&#x…...

游戏引擎学习第36天
仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中,目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎,这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中࿰…...

准确率99.9%的离线IP地址定位库 ip2region - python 示例
简介:ip2region是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。号称准确率99.9%的开源离线IP地址定位库。 历史攻略: Python:暴力破解密…...

wordpress网站使用Linux宝塔面板和SQL命令行导入导出超过50M限制的数据库
wordpress网站使用Linux宝塔面板添加mysql数据库,使用phpMyAdmin工具导入sql数据库文件,会有最大限制50M。即使把sql数据库文件压缩为gzip或zip压缩包,压缩包也超过50M,该怎么办?怎样导入超过50M数据库呢? …...

开发基础(3):开发应用沉浸式效果 组件安全区方案
什么是沉浸式效果 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条,其中状态栏和导航条,通常在沉浸式布局下称为避让区;避让区之外的区域称为安全区。 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感…...

Python中的数据可视化实战
一、前言 数据可视化是数据分析和报告中不可或缺的环节,它能够帮助我们直观地理解数据规律。Python提供了多个强大的可视化库,如Matplotlib、Seaborn、Plotly等。本文将通过实例演示这些工具的基本用法和高级技巧。 二、Matplotlib基础 1. Matplotlib的基本用法 import ma…...

计算机毕设-基于springboot的甜品店管理系统的设计与实现(附源码+lw+ppt+开题报告)
博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...

SpringMVC纯注解快速开发
此文章适合具有一定的java基础的同学看哦,如果有看不懂的基本代码还是先补补java基础哦。 此教程带您不使用xml文件而是纯注解开发,易懂、快捷、迅速,从0开始搭建,很快就能构建起一个SpringMVC项目,能学到两种使用tom…...

【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理
一个电商平台可能需要一个数据库来存储用户信息,另一个数据库来存储订单信息,甚至可能还有一个数据库用于数据分析。这种情况下,如何在Spring Boot应用中实现多数据源的管理就显得尤为重要。 1. 多数据源管理的重要性 在实际应用中…...

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全
目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…...

黑马点评项目测试总结
黑马点评项目测试面经总结: 一,怎么使用使用Postman进行接口测试? 1,安装Postman 2. 创建请求: 打开Postman,点击"New"按钮创建一个新的请求。在弹出的窗口中,选择请求的类型&#x…...

【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面
0x00 前言 朋友做标书,需要用到每日温度,他的老板让在这个网页手动复制做一个长期表出来:http://www.tianqihoubao.com/lishi/nanjing/month/202412.html 想着帮个忙,做个爬虫脚本吧,忽然发现这个页面很有意思…...

【docker】docker compose 和 docker swarm
Docker Compose 和 Docker Swarm 都是 Docker 生态中的工具,但它们有不同的用途和目标。 下面是这两者的主要区别,帮助你理解它们在不同场景中的使用。 1. 用途和目标 Docker Compose: 目标:主要用于在单个机器上定义和运行多个容器应用&a…...

Javaweb 前端 ajax
作用:和后端交互 script 是 js axios(这里是函数的调用方式){封装的是对象} {}是对象 案例 。then的含义,请求后端之后,后端把数据放在回调 点了清空之后,还要查询全部 await等待请求执行完之后,接收这个结果 代码…...

【蓝桥杯每日一题】重新排序
重新排序 2024-12-8 蓝桥杯每日一题 重新排序 前缀和 差分 题目大意 给定一个数组 A 和一些查询 L i , R i Li_,R_i Li,Ri, 求数组中第 L i L_i Li至第 R i R_i Ri个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能…...

《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
MAC算法有两种形式,分别是CBC-MAC算法和HMAC算法。 CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单地说就是最后一个密文分组的值就是MAC值。 HMAC(Hash-based Message Authentication Code)算法使用Hash算法作为加密基元&am…...