数据

JavaScript 压缩

现代页面的重量真正压在 JavaScript 上。这不只是访客下载的字节,还有浏览器随后必须解析和执行、才能让页面变得可交互的那段脚本。源码是写给人看的,有描述性命名、空格、注释,偶尔还有走不到的分支,这些几乎都不需要发到线上。这个工具直接在你的浏览器里运行 Terser,也就是各大打包器所用的同一引擎。你贴进一段脚本,立刻拿回经过压缩、局部名称缩短、死代码删除的版本,原始、压缩后和 gzip 三个体积放在一起,省了多少绝不靠猜。它会把 JavaScript 正确读出来,所以输出是一个安全、等价的程序,而你粘贴的一切都不会离开这个标签页。

  • 运行 Terser,也就是打包器在生产构建里用的同一个压缩器,会把代码读成语法树再安全变换,而不是靠猜
  • 不只是删空格,而是删掉死代码、折叠常量、缩短局部名称,真正去掉重量,这也是抗 gzip 的收益来源
  • 原始、压缩后和 gzip 三个体积一起显示,让你以服务器真正发送的大小判断收益,而不是只看原始字节
  • 全程在浏览器里运行,你粘贴的代码连同私有内容都留在本机,关闭标签页就不再保留
工具/JavaScript 压缩
489 B
节省 0%
选项

功能简介

压缩 JavaScript 比压缩 CSS 更复杂,因为你重写的是一个程序而不是裁剪文本,所以准确性最为关键。这个工具依靠 Terser 来妥善完成,并把证明它值得的数字摆出来。

  1. 01

    底层是 Terser

    各大打包器在生产构建里用的同一个压缩器。它把代码读成一棵树再安全变换,而不是用文本规则去猜。

  2. 02

    能真正去掉重量的压缩

    删除死代码和走不到的分支,折叠常量,化简表达式,归并冗余语句。这些结构性收益是单纯去空白永远做不到的。

  3. 03

    更短的局部名称

    把局部变量和参数重命名为一两个字符,同时顶层全局变量和保留字保持不动,程序照常工作,字节继续缩小。

  4. 04

    保留许可注释

    开源代码所要求的许可与 preserve 横幅可以留下,同时把输出里其余所有注释清掉。

  5. 05

    可信的体积明细

    原始、压缩后和 gzip 三个体积随输入更新,旁边是精确的节省百分比。其中 gzip 才是反映真正穿越网络的那个数字。

  6. 06

    复制、下载或上传

    从剪贴板粘贴、从磁盘加载文件,然后复制结果或保存为 min.js 文件。整个回路在本地几秒内完成。

如何使用

几步把可读源码变成可上生产、体积最小的脚本,全程把节省的数字摆在屏幕上。

  1. 01

    把 JavaScript 粘贴进输入面板,或用上传直接加载文件。

  2. 02

    选择选项。保持压缩优化和变量重命名开启可得最小输出,发许可横幅就保留许可注释。

  3. 03

    看选项下方的明细确认收益,那里有原始、压缩后和 gzip 三个体积以及节省百分比。

  4. 04

    若输入有语法错误,会显示错误信息供你修正;否则复制结果或下载为 min.js 文件。

  5. 05

    把压缩文件接入负责生产脚本的页面或构建步骤。

功能说明

这些细节让输出可放心上线、值得信任。

  • 基于 Terser,各大打包器都在用的标准 JavaScript 压缩器。
  • 支持现代语法,包括箭头函数、类、async 和 await、模板字符串以及可选链。
  • gzip 体积用浏览器自带的压缩测量,所以这个数字和真实服务器的传输大小相符。
  • 语法错误会带着信息原地报告,而不是悄悄产出损坏的输出。
  • 不上传、不记录。你粘贴的代码,连同私有内容,只留在浏览器里,关闭标签页就消失。

适合哪些场景

把 JavaScript 压到只剩本质,在这些场景里会回本。

  1. 更快、更可交互的页面

    更小的脚本能更早下载、解析和执行,改善可交互时间以及同时影响用户和搜索排名的核心网页指标。

  2. 没有打包器时的构建步骤

    在静态站点、小组件或你嵌到别处的代码片段里,把脚本贴到这里就能得到和流水线一样的压缩,无需搭建工具链。

  3. 发布可嵌入脚本

    当别人会把你的脚本放到他们的页面上时,你想交付的是一个体积最小的单文件,所以在发布分发包之前先压缩。

  4. 精简生成的代码

    厂商库和生成的产物有时是未压缩的。在它们抵达用户之前先过一遍这里,把字节省回来。

延伸阅读

脚本之外还要发样式?把它和CSS 压缩 搭配使用;而当你想要的是展开、整理代码而不是压缩时,SQL 格式化 则是反方向的格式化。

压缩 JavaScript 到底做了什么

压缩 JavaScript 远不止删空格。由于它重写的是程序本身,了解其中的环节会有帮助,每一步做了什么,以及为什么结果仍然跑得一样。

  1. 空白与标点

    去掉缩进、换行和不需要的分号,解析规则让其中许多可以完全省略。这是最廉价、最安全的一层,也是 gzip 本就大体能收回的一层。

  2. 压缩,结构层

    Terser 会求值常量表达式、移除永不执行的代码、内联简单取值、归并语句。真正的收益来自这里,是 gzip 够不到的那种,因为它去掉的是内容而不是排版。

  3. 重命名局部名称

    一个冗长、描述性的局部名会变成单个字母。只有可以安全改动的名字才会被处理。全局变量、对象属性以及任何导出项都保持原样,程序行为不变。

  4. 哪些保持不动

    公开名、对象属性键、字符串内容和保留字默认保留。这正是压缩后的代码仍能正确与其他脚本和页面通信的原因,因为对外的契约没有改变。

  5. 为什么 gzip 才是诚实的数字

    服务器会用 gzip 或 brotli 压缩 JavaScript,它们本就会压掉重复的空白和记号。压缩仍然取胜,因为它移除整段分支、缩短名称,但结果始终要看 gzip 体积,而不是原始字节。

  6. 是压缩,不要混淆

    压缩追求的是体积最小的等价程序,并借助 source map 保持可调试。混淆则刻意让代码难读,往往更大更慢。两者目标不同,这个工具做的是前者。

使用建议

这些习惯能让压缩后的 JavaScript 既小又可靠。

  • 把压缩放在构建的最后一步并部署其输出。永远不要手改压缩后的代码,也不要把它当作源码提交。
  • 用 gzip 体积判断收益,因为那才是服务器传输的大小。很大的原始缩减一旦套上压缩往往就只剩一点点。
  • 在压缩文件旁生成 source map,让生产环境的堆栈跟踪和调试器仍能指回你真正的代码。
  • 生产环境保持压缩和重命名开启;但若某个运行时依赖函数名,像部分框架那样,请保护这个名字而不是为了它整体关掉重命名。
  • 为压缩文件开启 gzip 或 brotli 并设置较长缓存。压缩与传输压缩是叠加而不是互相替代。

边界与注意事项

这个工具做什么,以及把什么留给其他步骤。

  • 它压缩单个 JavaScript 文件。它不会打包模块、解析 import,也不会跟踪对其他文件的引用。
  • 它只压缩,不转译。为老旧浏览器降级现代语法是 Babel 或 esbuild 之类工具的活。
  • 用 TypeScript 或 JSX 写的源码必须先编译成纯 JavaScript,因为这里只读取标准 JavaScript。
  • source map 生成与代码混淆不在范围内。这个工具专注于产出体积最小、仍可调试的等价程序。

常见问题

关于压缩 JavaScript、它改了什么、以及何时使用的常见问题。

压缩会破坏我的 JavaScript 吗?

只要输入合法就不会。Terser 把代码读成一棵树,只应用保持行为不变的改动。它重命名局部变量、删除死代码、缩短表达式,但不改变程序所做的事。公开名、属性和导出标识符都保持不动。唯一要留意的是在运行时依赖函数名或变量名的代码,像某些依赖注入设置那样。这种情况下请保护这些名字,或关掉重命名。

压缩优化和变量重命名有什么区别?

压缩优化是结构层。它删除死代码、折叠常量、化简表达式,大部分 gzip 够不到的收益来自这里。变量重命名是改名层。它把局部变量和参数名缩短为一两个字符。两者相互独立,可只开其一或都开,一起用能得到最小输出。

压缩和混淆有什么区别?

压缩是在保持等价、并借助 source map 可调试的前提下尽量减小体积。混淆则刻意让代码难以理解,常常以更大体积和更慢速度为代价。两者共享部分手法但目标相反,这个工具做的是压缩而不是混淆。

它支持现代 JavaScript 吗?

支持。Terser 理解当前语法,包括箭头函数、类、async 和 await、生成器、模板字符串、可选链以及空值合并。它压缩现代语法,但不会为老旧浏览器降级,那是转译器的活。

我能在这里压缩 TypeScript 吗?

不能直接压缩,因为这个工具处理纯 JavaScript。请先把 TypeScript 或 JSX 编译成 JavaScript,你的构建已经在做这件事,再把输出粘贴或上传到这里压缩。

我该把压缩文件留在仓库里吗?

不该。压缩后的 JavaScript 是构建产物,不是源码。提交你实际编辑的可读代码,把压缩文件作为发布前的最后一步生成。把压缩输出签入会让代码评审难以阅读、合并变得痛苦。

我的代码会被上传到什么地方吗?

不会。一切都在你的浏览器里运行。你粘贴的 JavaScript、上传的任何文件以及结果都在本地处理,绝不传输或存储,关闭标签页即刻消失,所以即便是私有代码也很安全。

更多相关工具

继续探索数据与格式工具集的其余部分。