ToolConvoyToolConvoyv2.6
DEV

JS 压缩器 — 压缩 JavaScript 以减小文件体积

通过去除空白、注释、重命名变量来压缩 JavaScript。支持 ES2020+ 语法,完全在浏览器中运行。无上传、无限制。

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次

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 读它是件痛苦的事。

广告

使用方法

  1. 粘贴你的 JavaScript

    把 JS 粘到输入区,或者加载一个 .js 文件。压缩器接受现代 ES2020+ 语法 —— 箭头函数、async/await、可选链、空值合并、顶层 await 都能被正确解析。

  2. 选择压缩级别

    安全(默认)只去除空白和注释,保留每个变量和函数名。激进还会把局部变量和函数重命名为短标识符,能再多减 5% 到 15%。

  3. 复制或下载结果

    把压缩后的 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 安装机会的受限环境里很有用。
广告
广告