首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第5章 样式处理
5.1 分离样式文件
5.1.1 extract-text-webpack-plugin
5.1.2 多样式文件的处理
5.1.3 mini-css-extract-plugin
5.2 样式预处理
5.2.1 Sass与SCSS
5.2.2 Less
5.3 PostCSS
5.3.1 PostCSS与Webpack
5.3.2 自动前缀
5.3.3 stylelint
5.3.4 CSSNext
5.4 CSS Modules
第6章 代码分片
6.1 通过入口划分代码
6.2 CommonsChunkPlugin
6.2.1 提取vendor
6.2.2 设置提取范围
6.2.3 设置提取规则
6.2.4 hash与长效缓存
6.2.5 CommonsChunkPlugin的不足
6.3 optimization.SplitChunks
6.3.1 从命令式到声明式
6.3.2 默认的异步提取
6.3.3 配置
6.4 资源异步加载
6.4.1 import()
6.4.2 异步chunk的配置
第7章 生产环境配置
7.1 环境配置的封装
7.2 开启production模式
7.3 环境变量
7.4 source-map
7.4.1 source-map原理
7.4.2 source-map配置
7.4.3 source-map安全
7.5 资源压缩
7.5.1 压缩JavaScript
7.5.2 压缩CSS
7.6 缓存
7.6.1 资源hash
7.6.2 输出动态HTML
7.6.3 使chunk id更稳定
7.7 bundle体积监控和分析
第8章 打包优化
8.1 HappyPack
8.1.1 工作原理
8.1.2 单个loader的优化
8.1.3 多个loader的优化
8.2 缩小打包作用域
8.2.1 exclude和include
8.2.2 noParse
8.2.3 IgnorePlugin
8.2.4 缓存
8.3 动态链接库与DllPlugin
8.3.1 vendor配置
8.3.2 vendor打包
8.3.3 链接到业务代码
8.3.4 潜在问题
8.4 去除死代码
8.4.1 ES6 Module
8.4.2 使用Webpack进行依赖关系构建
8.4.3 使用压缩工具去除死代码
当前位置:
首页>>
技术小册>>
Webpack实战:入门、进阶与调优(中)
小册名称:Webpack实战:入门、进阶与调优(中)
### 7.5 资源压缩 在Web开发中,资源压缩是提升网站性能的重要手段之一。随着Web应用的日益复杂,加载的JavaScript、CSS、图片等资源量也显著增加,这不仅延长了页面加载时间,还可能影响用户体验和SEO排名。Webpack作为现代JavaScript应用程序的静态模块打包器,提供了强大的资源压缩能力,帮助开发者在生产环境中有效地减少资源体积,提升页面加载速度。本章将深入探讨Webpack在资源压缩方面的应用,包括文本资源(如JavaScript和CSS)的压缩、图片压缩,以及如何通过Webpack插件和加载器实现更高效的资源压缩策略。 #### 7.5.1 文本资源压缩 ##### 7.5.1.1 JavaScript 压缩 JavaScript文件是Web应用中最重要的资源之一,其体积直接影响到页面的加载时间。Webpack内置了对JavaScript文件的压缩支持,主要通过`TerserPlugin`插件实现。`TerserPlugin`是Webpack的默认压缩插件,它基于Terser库(一个JavaScript解析器和压缩器,作为UglifyJS的继承者)来压缩JavaScript代码。 **配置示例**: 在Webpack配置文件中,你可以通过`optimization.minimize`选项启用JavaScript压缩,并通过`optimization.minimizer`自定义压缩插件配置。 ```javascript const TerserPlugin = require('terser-webpack-plugin'); module.exports = { // ... optimization: { minimize: true, minimizer: [new TerserPlugin({ terserOptions: { compress: { drop_console: true, // 移除console语句 drop_debugger: true, // 移除debugger语句 pure_funcs: ['console.log'] // 移除指定的纯函数 }, output: { comments: false, // 移除注释 }, }, extractComments: false, // 是否提取注释到单独的文件 })], }, // ... }; ``` ##### 7.5.1.2 CSS 压缩 与JavaScript类似,CSS文件也需要进行压缩以减少其体积。Webpack通过`MiniCssExtractPlugin`(用于将CSS提取到单独的文件中)结合`css-minimizer-webpack-plugin`(用于压缩CSS)来实现这一目标。 **配置示例**: 首先,安装必要的插件: ```bash npm install --save-dev mini-css-extract-plugin css-minimizer-webpack-plugin ``` 然后,在Webpack配置文件中进行配置: ```javascript const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); module.exports = { // ... module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', ], }, ], }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].[contenthash].css', chunkFilename: '[id].[contenthash].css', }), ], optimization: { minimizer: [ `...`, // 其他minimizer配置 new CssMinimizerPlugin(), ], }, // ... }; ``` #### 7.5.2 图片压缩 图片是Web应用中体积占比往往较大的资源之一。对图片进行有效的压缩可以显著减少页面加载时间,提升用户体验。Webpack通过加载器(loader)如`image-webpack-loader`、`file-loader`(通常与`image-minimizer-webpack-plugin`配合使用)等来实现图片的压缩。 **配置示例**: 首先,安装必要的插件和加载器: ```bash npm install --save-dev image-minimizer-webpack-plugin image-webpack-loader file-loader ``` 然后,在Webpack配置文件中进行配置: ```javascript const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin'); module.exports = { // ... module: { rules: [ { test: /\.(png|svg|jpg|jpeg|gif)$/i, type: 'asset', parser: { dataUrlCondition: { maxSize: 8 * 1024, // 小于8KB的图片转为Base64 }, }, generator: { filename: 'images/[name].[hash:8][ext]', }, // 可选:使用image-webpack-loader直接压缩(注意与ImageMinimizerPlugin的兼容性) // use: [ // { // loader: 'image-webpack-loader', // options: { // mozjpeg: { progressive: true, quality: 65 }, // optipng: { enabled: false, }, // pngquant: { quality: [0.65, 0.90], speed: 4 }, // gifsicle: { interlaced: false, }, // webp: { quality: 75 }, // }, // }, // ], }, ], }, plugins: [ // 使用ImageMinimizerPlugin进行图片压缩 new ImageMinimizerPlugin({ minimizerOptions: { plugins: [ ['gifsicle', { interlaced: true }], ['jpegtran', { progressive: true }], ['optipng', { optimizationLevel: 5 }], ['svgo', { plugins: [ { removeViewBox: false }, { cleanupIDs: false }, ], }], ], }, }), ], // ... }; ``` 注意:在实际应用中,你可能需要根据项目需求和图片类型选择最适合的压缩配置。同时,由于`image-webpack-loader`和`ImageMinimizerPlugin`功能相似,通常选择一个使用即可,避免重复压缩。 #### 7.5.3 其他资源压缩 除了文本和图片资源外,Web项目中还可能包含其他类型的资源,如字体文件、视频文件等。对于这些资源,Webpack同样提供了相应的处理机制,但压缩这些资源通常需要依赖第三方工具或服务,因为Webpack本身并不直接支持所有类型文件的压缩。 例如,对于字体文件,可以通过`file-loader`或`url-loader`将其处理为文件引用或Base64编码,但实际的压缩工作可能需要通过字体压缩工具(如Font Squirrel的Webfont Generator)在构建前完成。 对于视频文件,由于其体积通常较大,建议直接在上传前使用专业的视频编辑软件或在线服务进行压缩,而不是在Webpack构建过程中进行。 #### 7.5.4 压缩策略与优化 在实施资源压缩时,除了选择合适的工具和方法外,还需要考虑一些压缩策略和优化措施,以确保在减少资源体积的同时,不影响应用的功能和性能。 - **按需加载**:通过代码分割(Code Splitting)和动态导入(Dynamic Imports)实现资源的按需加载,避免一次性加载所有资源。 - **缓存利用**:为压缩后的资源设置合理的缓存策略,减少重复加载次数。 - **压缩质量权衡**:根据资源的重要性和加载优先级,调整压缩质量,避免过度压缩导致资源失真或加载速度降低。 - **构建分析**:使用Webpack的`--profile --json`选项生成构建分析报告,分析资源大小和加载时间,指导进一步的优化工作。 通过综合运用上述策略和优化措施,可以在保持Web应用功能完整性和性能的同时,有效减少资源体积,提升用户体验。
上一篇:
7.4.3 source-map安全
下一篇:
7.5.1 压缩JavaScript
该分类下的相关小册推荐:
webpack指南
全解webpack前端开发环境定制
Webpack零基础入门
Webpack实战:入门、进阶与调优(下)
Webpack实战:入门、进阶与调优(上)