最佳 JavaScript 压缩器

最好的 JavaScript 压缩器是什么? 我正在寻找一个工具:

  • 很容易使用
  • 压缩率很高
  • 产生可靠的最终结果(不会搞乱代码)
114590 次浏览

YUI Compressor 是可行的方法。它有一个很大的压缩率,是很好的测试,并在许多顶级网站使用,并且,好吧,我个人推荐。

我曾经在我的项目中使用过它,没有出现任何 JavaScript 错误或问题,而且它有很好的文档。

我从来没有使用过它的 CSS 压缩功能,但是它们也存在。

注意: 尽管 Dean Edwards 的/Packer/比 YUI Compressor 获得了更好的压缩率,但是我在使用它时遇到了一些 JavaScript 错误。

JSMin 是另一个。

尝试 JSMin,得到 C # ,Java,C 和其他端口,并随时可用。

下面是 HttpHandler 的源代码 ,它可以做到这一点,也许它会帮助你

几年后再回到这个问题,UglifyJS,似乎是目前最好的选择。

如下所述,它运行在 NodeJS 平台上,但是可以很容易地修改为运行在任何 JavaScript 引擎上。

- 老答案在下面

谷歌发布了 < strong > 闭包编译器 ,它似乎生成了迄今为止看到的最小的文件 给你给你

在此之前的各种选项 如下

基本上,Packer在初始压缩时会做得更好,但是如果你要在发送之前 gzip 文件(你应该这样做) ,YUI 压缩机会得到最小的最终尺寸。

顺便说一下,测试是在 jQuery 代码上完成的。

  • 原始 jQuery 库62,885字节,gzip 后19,758字节
  • JQuery 缩小为 JSMin36,391字节,gzip 之后为11,541字节
  • JQuery 最小化为 Packer 21,557字节,gzip 之后为11,119字节
  • JQuery 使用 YUI Compressor 缩小为31,822字节,gzip 之后为10,818字节

@ Daniel James在评论 压缩机中提到了 Packer 在最佳压缩中领先,所以我猜是 ymmv

我使用的是 < strong > ShrinkSafe 来自 Dojo 项目——它的特殊之处在于它实际上使用了一个 JavaScript 解释器(犀牛)来处理在代码中寻找符号和理解它们的范围等问题,这有助于确保代码在另一端出来时能够正常工作,而不是许多使用正则表达式的压缩工具(这不是很可靠)。

实际上,我在当前 Visual Studio 解决方案的 Web 部署项目中有一个 MSBuild 任务,该任务运行一个脚本,该脚本在部署之前通过 ShrinkSafe 运行解决方案的所有 JS 文件,并且运行得非常好。

编辑: 顺便说一句,“最好”是公开讨论的,因为“最好”的标准将根据项目的需要而变化。就个人而言,我认为 ShrinkSafe 是一个很好的平衡; 对于一些认为最小尺寸 = = 最好的人来说,它将是不够的。

编辑: 值得注意的是 YUI 压缩器也使用 Rhino。

这里 是一个 YUI 压缩程序脚本(比约克) ,它在一条路径中查找所有 js 和 css,并压缩/(可选)混淆它们。很高兴集成到构建过程中。

如果您使用 Packer,只需远离“收缩变量”选项并 gzip 生成的代码。Base62选项仅适用于服务器无法发送 gzip 文件的情况。带有“收缩变量”的 Packer 可以实现更好的 YUI 压缩,但是如果你在某个地方跳过了一个分号,就会引入 bug。

Base62基本上是一个穷人的 gzip,这就是为什么 gzip base62-ed 代码给你的文件比压缩缩变量代码更大。

KJSpress

Http://opensource.seznam.cz/kjscompress/index.html

Kjscompress/csskompress 应用程序(kjscompress a Csscompress)删除不重要的 来自文件的空格和注释 包含 JavaScript 和 CSS 是命令行应用程序 GNU/Linux 操作系统。

在寻找银弹的过程中,发现了这个 问题 Ruby on Rails Http://github.com/sstephenson/sprockets

我最近发布了一个用 JavaScript 编写的 JavaScript 压缩器 UglifyJS(运行在 NodeJS Node.js平台上,但是它可以很容易地修改以运行在任何 JavaScript 引擎上,因为它不需要任何内部的 Node.js)。它比 YUI 压缩机谷歌关闭都要快得多,在我测试过的所有脚本中,它的压缩效果都比 YUI好,而且比 Closure 更安全(知道如何处理“ eval”或“ with”)。

除了删除空格,UglifyJS 还执行以下操作:

  • 更改局部变量名(通常为单个字符)
  • 连接连续的 var 声明
  • 避免插入任何不需要的括号、括号和分号
  • 优化 IF (当检测到不需要时移除“ else”,将 IF 转换为 & & 、 | | 或?/: 可能的情况下的操作员等)。
  • 尽可能将 foo["bar"]转换为 foo.bar
  • 在可能的情况下,从对象文字中的键中移除引号
  • 当导致较小的代码(1 + 3 * 4 = = > 13)时,解析简单的表达式

PS: 哦,它也可以“美化”

Js Crush 是一个很好的压缩机,可以在缩小后使用。