Skip to content

gzip压缩

TIP

将文本文件(JS、CSS、HTML 等)压缩为更小的.gz 文件,服务器返回时告诉浏览器:“嘿,我给你的是压缩过的文件,你解压一下再用!”

压缩效果

  • JS/CSS 文件:通常能压缩 60%-80%
  • HTML 文件:压缩率约 70%
  • 图片 / 视频:本身已经压缩过,Gzip 效果甚微

性能提升

  • 减少网络传输时间
  • 降低服务器带宽压力
  • 加快页面加载速度(尤其在移动网络环境下)

Vue CLI 项目配置

vue.config.js文件

优化打包体积,在性能方面可以起到优化作用

js
npm i compression-webpack-plugin --save-dev
npm i compression-webpack-plugin --save-dev
js
const { defineConfig } = require("@vue/cli-service");
const CompressionWebpackPlugin = require("compression-webpack-plugin");

module.exports = defineConfig({
  configureWebpack: (config) => {
    if (process.env.NODE_ENV === "production") {
      return {
        plugins: [
          new CompressionWebpackPlugin({
            test: /\.js$|\.html$|\.css/, // 压缩文件的后缀
            threshold: 10240, // 对超过 1k 的文件进行压缩
            deleteOriginalAssets: false, // 保留压缩前文件
          }),
        ],
      };
    }
  },
});
const { defineConfig } = require("@vue/cli-service");
const CompressionWebpackPlugin = require("compression-webpack-plugin");

module.exports = defineConfig({
  configureWebpack: (config) => {
    if (process.env.NODE_ENV === "production") {
      return {
        plugins: [
          new CompressionWebpackPlugin({
            test: /\.js$|\.html$|\.css/, // 压缩文件的后缀
            threshold: 10240, // 对超过 1k 的文件进行压缩
            deleteOriginalAssets: false, // 保留压缩前文件
          }),
        ],
      };
    }
  },
});

Vite 项目配置

同时也出了一个br压缩的插件,可以压缩js、css、html等文件。压缩率比 Gzip 高 15%-20%,现代浏览器都支持

在 vite.config.js 文件中添加以下代码:

js
npm i vite-plugin-compression --save-dev
npm i vite-plugin-compression --save-dev
js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import compression from 'vite-plugin-compression';

export default defineConfig({
  plugins: [
    vue(),
    
    // Gzip压缩配置
    compression({
      algorithm: 'gzip', // 压缩算法,可选 'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw'
      ext: '.gz', // 生成的压缩文件扩展名
      threshold: 10240, // 只处理大于此大小的文件(字节)
      deleteOriginFile: false, // 是否删除原文件
    }),
    
    // Brotli压缩配置
    compression({
      algorithm: 'brotliCompress',
      ext: '.br',
      threshold: 10240,
    }),
  ],
});
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import compression from 'vite-plugin-compression';

export default defineConfig({
  plugins: [
    vue(),
    
    // Gzip压缩配置
    compression({
      algorithm: 'gzip', // 压缩算法,可选 'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw'
      ext: '.gz', // 生成的压缩文件扩展名
      threshold: 10240, // 只处理大于此大小的文件(字节)
      deleteOriginFile: false, // 是否删除原文件
    }),
    
    // Brotli压缩配置
    compression({
      algorithm: 'brotliCompress',
      ext: '.br',
      threshold: 10240,
    }),
  ],
});

Nginx 服务器配置

启用 Gzip

nginx
# nginx.conf
http {
  # 开启Gzip
  gzip on;
  gzip_vary on;  # 告诉客户端服务器支持多种压缩格式
  
  # 只压缩超过1KB的文件
  gzip_min_length 1024;
  
  # 压缩级别(1-9),9为最高压缩率,但消耗更多CPU
  gzip_comp_level 6;
  
  # 压缩类型
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  
  # 不压缩ie6及以下版本
  gzip_disable "msie6";
  
  # 优先使用Brotli压缩(如果同时存在.br和.gz文件)
  brotli on;
  brotli_comp_level 6;
  brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
# nginx.conf
http {
  # 开启Gzip
  gzip on;
  gzip_vary on;  # 告诉客户端服务器支持多种压缩格式
  
  # 只压缩超过1KB的文件
  gzip_min_length 1024;
  
  # 压缩级别(1-9),9为最高压缩率,但消耗更多CPU
  gzip_comp_level 6;
  
  # 压缩类型
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  
  # 不压缩ie6及以下版本
  gzip_disable "msie6";
  
  # 优先使用Brotli压缩(如果同时存在.br和.gz文件)
  brotli on;
  brotli_comp_level 6;
  brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

性能优化

压缩策略

  • 优先使用 Brotli:压缩率比 Gzip 高 15%-20%,现代浏览器都支持
  • 组合使用:同时生成.gz 和.br 文件,让服务器根据客户端支持情况选择
  • 排除不需要压缩的文件:图片、视频等二进制文件无需压缩

性能优化组合拳

  • Gzip/Brotli 压缩
  • 代码分割(Code Splitting)
  • 图片优化(使用 WebP、压缩图片)
  • 懒加载(Lazy Loading)
  • CDN 加速

程序员小洛文档