JavaScript压缩工具

粘贴 JavaScript 代码即可获得体积缩小 40%-70% 的压缩版:去除空白字符、将变量缩写为单个字母、移除死分支、折叠常量,并在你启用时清除注释。适用于快速检查文件大小、一次性嵌入,以及无需运行完整构建工具链的着陆页。

如何精简 JavaScript

  1. 1

    粘贴源代码

    任何有效的 ES5+ JavaScript 语法均可使用;对于 ES6 及更高版本(模板字面量、类、模块),请确保目标版本与之兼容。

  2. 2

    选择压缩强度

    安全模式(仅空白和注释);默认模式(+ 变量名混淆);激进模式(+ 属性名混淆,可能导致 DOM 访问异常)。

  3. 3

    最小化

    该工具可执行与Terser兼容的转换,并输出包含处理前/处理后字节数的结果。

  4. 4

    复制或下载

    将输出内容粘贴到`<script>`标签中,或另存为`.min.js`格式以便在 CDN 中使用。

字节的去向

典型的压缩文件体积比源文件小40%-70%。若使用gzip(或Cloudflare及大多数CDN采用的Brotli)进行压缩,还可再降低60%-75%。综合来看,一个100KB的源文件经压缩后传输时仅需约15-25KB。

源文件 压缩后 +gzip +Brotli
jQuery 3.6 87 KB 30 KB 27 KB
Lodash 4.17 71 KB 25 KB 22 KB
React + ReactDOM 18 140 KB 44 KB 39 KB

应用的技术

技术 作用
移除空白 去除空格、制表符和换行符
移除注释 删除 ///* */!important 除外)
变量名混淆 userName 重命名为 u(作用域安全)
属性名混淆 obj.foo 重命名为 obj.a(不安全)
常量折叠 1 + 2 + 36
死代码消除 删除 return 之后的分支
控制流内联 内联仅使用一次的小型函数
字符串字面量压缩 合并重复的字符串常量

安全模式 vs 攻击模式

  • 安全模式保留变量名称,仅去除空白字符;适用于需要可读堆栈跟踪信息的调试场景。
  • 默认模式会混淆局部变量,但保留全局变量和属性名称。适用于大多数代码。
  • 激进模式会混淆所有内容,包括属性名称。除非配置保留名称,否则该模式通常会导致动态访问属性的代码出错(如 obj["prop"]Object.keys(obj))。

何时进行压缩,以及何时不应进行

  • 请在生产环境中,对浏览器下载的每个资源都进行压缩。
  • 请提供源映射文件,以便浏览器的开发者工具在调试时仍能显示原始名称。
  • 请勿在开发阶段进行压缩,这会浪费构建时间并导致错误信息难以阅读。
  • 请勿对已压缩的代码再次压缩。.min.js 文件在重新压缩时体积仅缩减约 1%-3%,却有破坏代码的风险。

常见错误

  • 未配置保留名称。payment_method 被错误修改为 a 时,动态属性访问(obj["payment_method"])功能将失效。
  • 忘记源地图。 若缺少 .map 文件,生产错误信息将无法读取。
  • **同时对CommonJS和 ESM 进行压缩。**混合模块系统在压缩前需仔细执行树结构优化。

常见问题

通常未压缩时文件体积缩小40%-70%,经gzipped或Brotli压缩后进一步缩减60%-75%。一个100 KB的源文件在传输过程中通常仅占用约15-25 KB。

默认(局部变量)混淆几乎总是安全的。激进的属性名混淆会破坏所有动态访问属性的代码。启用前,请仔细配置 reserved 列表。

是的,启用“生成源代码映射”选项后,该工具将返回压缩后的代码及一个.map文件(该文件可将每个字节映射回原始源代码)。请将两者上传至您的 CDN ,以便DevTools显示可读的堆栈跟踪信息。

支持。顶层 await、类字段、私有方法、空值合并(nullish coalescing)、可选链(optional chaining)以及数字分隔符都受支持。对于非常新的提案(如装饰器 stage-3),请查阅相应的具体标志说明。

相关工具

此工具还提供其他语言版本