什么是最好的JavaScript压缩器?我正在寻找一种工具:
很容易使用
具有高压缩率
产生可靠的最终结果(不会弄乱代码)
小智.. 149
我最近发布了UglifyJS,一个用JavaScript编写的JavaScript压缩器(在NodeJS Node.js平台上运行,但它可以很容易地修改为在任何JavaScript引擎上运行,因为它不需要任何Node.js
内部构件).它比YUI Compressor和Google Closure快得多,它在我测试它的所有脚本上比YUI压缩得更好,而且它比Closure更安全(知道处理"eval"或"with").
除了删除空格外,UglifyJS还执行以下操作:
更改局部变量名称(通常为单个字符)
连接连续的var声明
避免插入任何不需要的括号,parens和分号
优化IF(当检测到不需要时删除"else",在可能的情况下将IF转换为&&,||或?/:运算符等).
转变foo["bar"]
为foo.bar
可能的地方
尽可能从对象文字中的键中删除引号
当这会导致更小的代码(1 + 3*4 ==> 13)时解析简单表达式
PS:哦,它也可以"美化".;-)
我最近发布了UglifyJS,一个用JavaScript编写的JavaScript压缩器(在NodeJS Node.js平台上运行,但它可以很容易地修改为在任何JavaScript引擎上运行,因为它不需要任何Node.js
内部构件).它比YUI Compressor和Google Closure快得多,它在我测试它的所有脚本上比YUI压缩得更好,而且它比Closure更安全(知道处理"eval"或"with").
除了删除空格外,UglifyJS还执行以下操作:
更改局部变量名称(通常为单个字符)
连接连续的var声明
避免插入任何不需要的括号,parens和分号
优化IF(当检测到不需要时删除"else",在可能的情况下将IF转换为&&,||或?/:运算符等).
转变foo["bar"]
为foo.bar
可能的地方
尽可能从对象文字中的键中删除引号
当这会导致更小的代码(1 + 3*4 ==> 13)时解析简单表达式
PS:哦,它也可以"美化".;-)
几年后重新审视这个问题,UglifyJS似乎是目前最好的选择.
如下所述,它在NodeJS平台上运行,但可以轻松修改以在任何JavaScript引擎上运行.
---下面的老答案---
谷歌发布了关闭编译器似乎至今被产生最小的文件,看到这里和这里
在此之前,各种选择如下
基本上Packer在初始压缩方面做得更好,但是如果你要在发送线路之前gzip文件(你应该这样做),YUI Compressor获得最小的最终大小.
测试是在jQuery代码btw上完成的.
原始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
YUI Compressor是要走的路.它具有很好的压缩率,经过充分测试,并在许多顶级网站中使用,而且,我个人推荐.
我已经将它用于我的项目而没有一个JavaScript错误或打嗝.它有很好的文档.
我从未使用过它的CSS压缩功能,但它们也存在.CSS压缩也可以.
注意:虽然Dean Edwards的/ packer /实现了比YUI Compressor更好的压缩率,但在使用它时遇到了一些JavaScript错误.
我使用Dojo项目中的ShrinkSafe - 它很特别,因为它实际上使用JavaScript解释器(Rhino)来处理在代码中查找符号并理解它们的范围等,这有助于确保代码在出现时能够正常工作另一方面,与许多使用正则表达式做同样的压缩工具相反(这不是那么可靠).
我实际上在我当前的Visual Studio解决方案中的Web部署项目中有一个MSBuild任务,它运行一个脚本,然后在我们部署之前通过ShrinkSafe运行所有解决方案的JS文件并且它运行良好.
编辑:顺便说一下,"最佳"是有争议的,因为"最佳"的标准将根据项目的需要而变化.就个人而言,我认为ShrinkSafe是一个很好的平衡; 对于一些认为最小尺寸==最佳的人来说,这将是不够的.
编辑:值得注意的是YUI压缩器也使用Rhino.
尝试使用JSMin,获得C#,Java,C和其他端口,也可以随时使用.