JavaScript压缩工具

粘贴脚本或 ES 模块(最多 1,000,000 个字符),或打开一个 .js 文件。

下一步:选择选项

粘贴 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

应用的技术

技术 作用
移除空白 去除空格、制表符和换行符
移除注释 删除 // 和 /* */(可保留 /*! 等许可证注释)
变量名混淆 将 userName 重命名为 u(作用域安全)
属性名混淆 将 obj.foo 重命名为 obj.a(不安全)
常量折叠 1 + 2 + 3 → 6
死代码消除 删除 return 之后的分支
控制流内联 内联仅使用一次的小型函数
语句合并与布尔值简写 a(); b(); → a(),b();,true → !0

安全模式 vs 攻击模式

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

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

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

常见错误

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

常见问题

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

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

可以。勾选“同时生成 Source Map(源映射)”,即可随精简后的代码得到一个 .map 文件。它把精简后的代码对应回您原来的行和名称,让浏览器 DevTools 显示可读的代码和堆栈跟踪。请把两个文件放在同一文件夹中:精简后的代码末尾带有 //# sourceMappingURL= 注释,会按文件名找到映射文件。映射文件包含您的原始代码,因此只应发布在允许任何人阅读这些代码的地方。

支持。顶层 await(在 ES 模块中)、类字段、私有方法、空值合并运算符、可选链和数字分隔符都受支持。装饰器不受支持:请先像 TypeScript 或 JSX 一样,把它们编译为普通 JavaScript。精简工具绝不会把新语法转换为旧版本:“ECMAScript 版本”选项只决定精简后的代码为节省字节可以使用的最新语法。

不会。您粘贴或打开的代码在浏览器中完成精简,不会发送到我们的服务器,也不会添加到页面链接中。在各步骤之间,代码保存在此标签页的会话存储中,关闭标签页时浏览器会将其清除。

相关工具

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