Skip to content
code2026-07-252 分钟阅读

什么是 JavaScript 压缩

JavaScript 压缩(JS Minification)是移除 JS 文件中不必要的字符(空白、注释、短变量名等)以减小文件体积的过程。高级压缩工具还会进行代码优化,如死代码消除、常量折叠等。

压缩前后对比

压缩前:

// 计算两个数的和
function addNumbers(a, b) {
    // 返回两数之和
    var result = a + b;
    return result;
}

var x = 10;
var y = 20;
console.log(addNumbers(x, y));

压缩后:

function addNumbers(a,b){return a+b}console.log(addNumbers(10,20));

为什么需要 JS 压缩

  1. JavaScript 是体积最大的资源:通常占页面总大小的 40-70%
  2. 压缩率高:压缩率通常 40-70%
  3. JS 是解析阻塞资源:更小的文件 = 更快的解析和执行
  4. 提升 Core Web Vitals:减少 LCP(最大内容绘制)时间
  5. 节省 CDN 带宽:流量费用显著降低
  6. 移动端优化:手机 CPU 解析速度较慢,压缩尤为重要

JS 压缩策略

| 策略 | 说明 | 示例 | |------|------|------| | 移除空白 | 压缩空格、换行、缩进 | — | | 移除注释 | 删除单行和多行注释 | — | | 变量名缩短 | 局部变量重命名为短名称 | resultr | | 死代码消除 | 移除不可达代码 | — | | 常量折叠 | 编译时计算常量表达式 | 2+35 | | 内联函数 | 将简单函数调用替换为函数体 | — | | 属性访问点号 | obj["name"]obj.name | — |

如何使用在线工具

使用 DevToolkit Pro 的 JavaScript 压缩工具

  1. 粘贴 JavaScript 代码
  2. 选择压缩选项(变量缩短、死代码消除等)
  3. 实时显示压缩后的代码
  4. 显示压缩率和节省的字节数

构建工具中的 JS 压缩

Webpack(TerserPlugin)

const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          compress: {
            drop_console: true,    // 移除 console.log
            drop_debugger: true,   // 移除 debugger
            pure_funcs: ['console.log'] // 标记纯函数可移除
          },
          mangle: true // 变量名缩短
        }
      })
    ]
  }
};

Vite

import { defineConfig } from 'vite';

export default defineConfig({
  build: {
    minify: 'terser', // 使用 terser 压缩
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    }
  }
});

esbuild(Vite 默认)

import { defineConfig } from 'vite';

export default defineConfig({
  build: {
    minify: 'esbuild' // esbuild 比 terser 快 10-100 倍
  }
});

JS 压缩工具对比

| 工具 | 速度 | 压缩率 | 生态 | |------|------|--------|------| | esbuild | 极快 | 良好 | Vite 默认 | | terser | 中等 | 最优 | Webpack 默认 | | SWC | 快 | 良好 | Next.js 默认 | | uglify-js | 中等 | 良好 | 经典工具 |

FAQ

压缩后的代码还能调试吗?

压缩后代码难以阅读。解决方案:生成 Source Map 文件。浏览器开发者工具可以通过 Source Map 显示原始代码,同时生产环境使用压缩版本。

为什么 console.log 要移除?

console.log 语句:

  1. 占用额外空间
  2. 在生产环境中泄露调试信息
  3. 有微小的性能开销

使用 terser 的 drop_console: true 配置自动移除。

esbuild 和 terser 该选哪个?

优先选择 esbuild:速度快 10-100 倍,适合大型项目。如果需要更精细的压缩控制(如自定义混淆策略),使用 terser。Vite 默认使用 esbuild,Webpack 默认使用 terser。


本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页


ad