173

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

  • 易于使用
  • 具有高压缩率
  • 产生可靠的最终结果(不会弄乱代码)
4

13 回答 13

151

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

除了删除空格,UglifyJS 还做了以下事情:

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

PS:哦,它也可以“美化”。;-)

于 2010-08-22T14:50:31.130 回答
125

几年后重新审视这个问题,UglifyJS似乎是目前最好的选择。

如下所述,它运行在 NodeJS 平台上,但可以轻松修改以在任何 JavaScript 引擎上运行。

---下面的旧答案---

谷歌发布了Closure Compiler,它似乎生成了迄今为止看到的最小文件herehere

在此之前,各种选项如下

基本上Packer在初始压缩方面做得更好,但是如果您要在通过网络发送之前对文件进行 gzip 压缩(您应该这样做),YUI Compressor会获得最小的最终大小。

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

  • 原始 jQuery 库 62,885 字节,gzip 后 19,758 字节
  • jQuery 用 JSMin 缩小 36,391 字节,gzip 后 11,541 字节
  • jQuery 使用 Packer 缩小 21,557 字节,gzip 后缩小 11,119 字节
  • jQuery 使用 YUI Compressor 压缩 31,822 字节,gzip 后 10,818 字节

@daniel james在评论compressrater中提到,这表明Packer 在最佳压缩方面领先图表,所以我猜是ymmv

于 2008-08-26T19:48:34.927 回答
43

YUI 压缩机是要走的路。它具有很高的压缩率,经过良好测试并在许多顶级站点中使用,而且,我个人推荐。

我已经将它用于我的项目,没有出现任何 JavaScript 错误或打嗝。它有很好的文档。

我从未使用过它的 CSS 压缩功能,但它们也存在。CSS 压缩同样有效。

注意:虽然 Dean Edwards 的 / packer / 实现了比 YUI Compressor 更好的压缩率,但我在使用它时遇到了一些 JavaScript 错误。

于 2008-08-26T19:39:44.010 回答
8

我使用Dojo 项目中的ShrinkSafe - 它非常特别,因为它实际上使用 JavaScript 解释器 ( Rhino ) 来处理在代码中查找符号并理解它们的范围等,这有助于确保代码在出现时能够正常工作另一方面,与许多使用正则表达式来做同样事情的压缩工具相反(这不那么可靠)。

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

编辑:顺便说一句,“最佳”是有争议的,因为“最佳”的标准将根据项目的需要而有所不同。就个人而言,我认为 ShrinkSafe 是一个很好的平衡点;对于一些认为最小尺寸 == 最好的人来说,这将是不够的。

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

于 2008-08-26T20:03:40.007 回答
5

尝试JSMin,获得 C#、Java、C 和其他端口并且也随时可用。

于 2008-08-26T19:42:48.153 回答
4

如果您使用 Packer,只需选择“缩小变量”选项并 gzip 生成的代码。base62 选项仅适用于您的服务器无法发送 gzip 压缩文件的情况。带有“shrink vars”的 Packer 可以更好地压缩 YUI,但如果您在某处跳过了分号,则可能会引入错误。

base62 基本上是一个穷人的 gzip,这就是为什么 gzip 压缩 base62-ed 代码比 gziping shrink-var-ed 代码提供更大的文件。

于 2008-08-28T14:43:38.073 回答
3

JSMin是另一个。

于 2008-08-26T19:41:56.253 回答
2

在搜索银弹中,发现了这个问题。对于 Ruby on Rails http://github.com/sstephenson/sprockets

于 2010-05-19T14:29:14.890 回答
1

这是执行此操作的 HttpHandler 的源代码,也许它会对您有所帮助

于 2008-08-26T19:48:33.770 回答
1

是一个 YUI 压缩器脚本 ( Byuic ),它查找路径下的所有 js 和 css 并压缩 /(可选)混淆它们。很高兴集成到构建过程中。

于 2008-08-26T22:35:02.513 回答
1

bananascript.com曾经给我最好的结果。

于 2008-09-15T18:50:53.557 回答
1

KJS压缩

http://opensource.seznam.cz/KJScompress/index.html

Kjscompress/csskompress 包含两个应用程序(kjscompress 和 csscompress),用于从包含 JavaScript 和 CSS 的文件中删除不重要的空格和注释。两者都是 GNU/Linux 操作系统的命令行应用程序。

于 2009-06-07T15:55:07.267 回答
1

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

于 2010-08-22T17:47:14.757 回答