JS 压缩器 — 压缩 JavaScript 以减小文件体积
通过去除空白、注释、重命名变量来压缩 JavaScript。支持 ES2020+ 语法,完全在浏览器中运行。无上传、无限制。
JS Minifier
Minify and compress JavaScript code. Works entirely in your browser — no uploads.
JavaScript 压缩一直是客户端代码部署到生产环境的标准步骤,从 2000 年代后期 jQuery 压缩版成为网络上下载量最大的文件时就如此。论据很简单:每一个走线缆传输的 JS 字节都是引擎需要解析的字节,而解析在 Time to Interactive 的关键路径上。一个典型的现代网页会发 200 到 500 KB 的 JS,其中 30% 到 50% 是空白、注释和描述性的长名字 —— 引擎不需要这些。压缩把它们全部剥掉,产出体积更小、下载和解析更快、运行时间相同的输出。这种体积减小就是免费性能。
压缩中「不那么显然」的一点是安全与激进预设之间的取舍。安全预设只做最显然的事:剥注释、折叠空白、删除多余的分号、在更小处把 true/false/undefined 替换成字面量形式。激进预设走得更远:把局部变量和函数表达式重命名为单字母标识符、内联只使用一次的变量、删除不可达的代码、化简布尔表达式。两者都产生语义等价的输出,但激进预设会破坏依赖 Function.name 与源代码名称匹配的代码(罕见),或对自己的源码使用 eval 的代码(也很罕见,本身也是糟糕的模式)。
最终的交接:如果目标是给生产环境发 JS,让源码过一遍真正的构建流水线(esbuild、Vite、Webpack)—— 这些工具在一次处理中完成合并、压缩、转译和 tree-shake。本浏览器工具适合一次性压缩、调试单个文件、或检视压缩器对你没写的代码做了什么。如果目标是调试生产环境的问题,在你的构建流水线里生成一个 source map,并把它与发布的文件分开保存 —— 压缩后的代码与源码功能上完全相同,但脱离 source map 读它是件痛苦的事。
使用方法
粘贴你的 JavaScript
把 JS 粘到输入区,或者加载一个 .js 文件。压缩器接受现代 ES2020+ 语法 —— 箭头函数、async/await、可选链、空值合并、顶层 await 都能被正确解析。
选择压缩级别
安全(默认)只去除空白和注释,保留每个变量和函数名。激进还会把局部变量和函数重命名为短标识符,能再多减 5% 到 15%。
复制或下载结果
把压缩后的 JS 复制到剪贴板,或下载为 .min.js 文件。下载按钮上方显示体积减少百分比,方便你验证收益。
常见问题
压缩会改变运行时行为吗?
不会。压缩后的 JS 在所有输入下产生完全相同的执行、相同的作用域链、相同的输出。唯一的变化是去除空白、剥离注释、缩短局部标识符 —— 这些对 JS 引擎都不可见。
压缩后能小多少?
手写 JS 通常缩小 30% 到 50%,已经被框架压缩过的输出再缩 10% 到 25%。注释多、命名详尽的库能缩小 60% 甚至更多。节省的是带宽和解析时间,不是执行时间 —— 现代引擎解析压缩和未压缩代码的速度差不多。
这与 JS 打包器有什么区别?
打包器(Webpack、Vite、esbuild、Rollup)把多个 JS 文件合并成一个、解析 import、处理 tree-shake。压缩器(本工具)减小单个 JS 文件的体积。大多数构建流水线两步都跑:先打包,再压缩打包后的文件。
包含 source map 吗?
不包含 —— 压缩后的 JS 默认不带 source map。对生产环境调试,在你的构建流水线中生成 source map(esbuild、Rollup 或 Terser 的 `--sourcemap` 标志),并把它与发布的 .min.js 文件分开保存。source map 从不上传到生产。
能处理 TypeScript 或 JSX 吗?
TypeScript 语法(类型注解、接口、泛型)不是合法 JS —— 压缩器不会解析它。JSX 是合法 JS(它是 `React.createElement` 调用的语法糖),能解析,但输出在没有 JSX transform 的情况下可能无法正常运行。在压缩前先在构建流水线里剥除类型和 JSX。
限制说明
- 不支持 TypeScript 或 JSXTypeScript 类型注解不是合法 JS —— 先用 `tsc` 或 `esbuild` 剥除类型。JSX 能解析,但输出在没有 JSX transform 时可能无法运行。本压缩器只处理纯 JS。
- 不输出 source map压缩后的 JS 不包含 source map。对生产调试,在你的构建流水线中生成一个,并把它与发布的文件分开保存。这里的压缩器适合一次性压缩场景,不是完整的构建配置。
- 激进模式可能重命名公开 API激进级别把局部变量和函数表达式重命名为短标识符。顶层 `export` 出的函数和挂到 `globalThis` 上的 API 会保留,但如果你的代码依赖 `Function.name` 与源代码名称匹配,请用安全预设。
平台说明
- macOS
- 命令行场景下,标准等价是 `npx terser input.js -o output.min.js`。本浏览器工具适合不值得为此安装 Node 和 Terser 的一次性压缩场景。
- Windows
- PowerShell 不能原生压缩 JS。本浏览器工具适合临时工作;构建流水线用 npm 上的 esbuild 或 Terser。这里的压缩算法对相同输入与 Terser 的 safe preset 一致。
- Linux
- 标准 CLI 等价是 `npx terser input.js -o output.min.js` 或 `npx esbuild --minify input.js`。本浏览器工具适合从聊天、邮件、文档页粘贴 JS 的场景 —— 在终端里重打一遍不现实。
- Web
- 完全在客户端运行。页面加载后离线可用。在没有命令行工具或 Node.js 安装机会的受限环境里很有用。