《十九》在 Webpack 中对文件进行 HTTP 压缩

本文介绍了HTTP压缩在提高传输速度和带宽利用上的作用,涉及Webpack中的CompressionPlugin插件使用、常见压缩格式如gzip、deflate和br,以及如何在Webpack配置中设置压缩阈值和算法。

HTTP 压缩是一种内置在客户端和服务器之间的改进传输速度和带宽利用率的方式。

HTTP 压缩的流程为:

  1. 资源在给到服务器之前就被压缩好。

    可以在 Webpack 中进行资源的压缩。

  2. 兼容的浏览器在向服务器发送请求时,通过请求头中 Accept-Encoding 告知服务器自己支持哪些压缩格式。
  3. 服务器接收到浏览器请求后,返回对应的压缩后的文件,并通过响应头的 Content-Encoding 告知浏览器。
  4. 浏览器接收到返回后的压缩文件,会自动对其进行解压、加载和执行。

HTTP 压缩常见的压缩格式有:compress(历史性原因,已不再推荐使用)、gzip(目前使用比较广泛)、deflate(目前使用也比较多)、br(一种新的开源压缩算法、专门为 HTTP 内容的编码而设计,但目前有些浏览器不支持)。

在 Webpack 中对文件进行 HTTP 压缩:

在 Webpack 中对文件进行 HTTP 压缩,是实现了 HTTP 压缩的第一步操作。可以通过 CompressionPlugin 插件来实现。

  1. 安装 CompressionPlugin 插件:npm install compression-webpack-plugin --save-dev

  2. 新建 src/index.js 文件,并编写代码。

    console.log('index')
    
    const getNum = () => {
      console.log(10)
      return 10
    }
    const num = getNum()
    console.log(num + 20)
    
    const getStr = () => {
      console.log('Hello')
      return 'Hello'
    }
    const str = getStr()
    console.log(str + 'World')
    
    const getBool = () => {
      console.log(true)
      return true
    }
    const bool = getBool()
    console.log(!bool)
    
  3. webpack.config.js 配置文件中进行配置。

    const CompressionPlugin = require('compression-webpack-plugin');
    
    module.exports = {
      plugins: [
        new CompressionPlugin(),
      ]
    }
    

    可以对 CompressionPlugin 插件进行配置。CompressionPlugin 接收一个对象作为参数,其中常见的属性有:

    1. threshold:超过多大的文件才对其进行压缩。
    2. minRatio:压缩的最小比率,只要达到了最小的压缩比率才进行压缩。

      压缩比率:压缩后文件大小除以源文件的代码。

    3. test:匹配的规则,对匹配到的文件才进行压缩。
    4. algorithm:要采用的压缩算法。
    5. include:需要被压缩的文件。
    6. exclude:不需要被压缩的文件。
  4. 运行 webpack 命令进行打包,会发生打包输出的文件都生成了对应 gzip 文件。
    请添加图片描述

Webpack 3.0 中,可以通过以下方式配置 JS 文件的代码分割和压缩功能: ### 配置代码分割 Webpack 3.0 使用 `CommonsChunkPlugin` 来实现代码分割。该插件可以将多个入口文件中公共的部分提取出来,单独打包成一个或多个 chunk,从而减少重复加载并提升性能。 例如,在 `webpack.config.js` 中配置如下内容来提取公共代码: ```javascript const webpack = require('webpack'); module.exports = { entry: { app: './src/index.js', vendor: ['lodash', 'react'] // 第三方库单独打包 }, output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist') }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ name: 'vendor' // 将入口文件中的第三方依赖打包成名为 vendor 的 chunk }), new webpack.optimize.CommonsChunkPlugin({ name: 'manifest', // 提取 webpack 的运行时代码 minChunks: Infinity }) ] }; ``` 通过上述配置,`app.bundle.js` 包含应用代码,`vendor.bundle.js` 包含第三方库代码,`manifest.bundle.js` 包含 webpack 的运行时逻辑 [^2]。 ### 配置 JS 压缩 Webpack 3.0 默认不会压缩输出的 JS 文件,需要手动引入 `UglifyJsPlugin` 来进行压缩处理。此插件可以去除注释、空格,并对代码进行优化,从而减小最终生成的 JS 文件体积。 在 `webpack.prod.config.js` 中添加如下配置: ```javascript const webpack = require('webpack'); module.exports = { // ...其他配置 plugins: [ new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false // 不显示压缩警告 }, output: { comments: false // 不保留注释 } }) ] }; ``` 上述配置会在构建生产环境包时自动压缩 JavaScript 文件 [^1]。 ### 其他优化建议 - **缓存控制**:在输出文件名中加入 `[chunkhash]` 或 `[contenthash]`,确保浏览器能够正确识别更新后的资源文件。例如: ```javascript output: { filename: '[name].[contenthash:12].js' } ``` 这样每次构建后,只有发生变化的文件才会更改哈希值,有助于利用浏览器缓存提升加载速度 [^3]。 - **开发与生产区分**:可以在不同模式下使用不同的配置,如开发环境启用 `devtool` 以方便调试,而在生产环境中关闭这些选项以提高性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值