关于压缩:最佳JavaScript压缩器

关于压缩:最佳JavaScript压缩器

Best JavaScript compressor

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

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

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

除了去除空格之外,UglifyJS还执行以下操作:

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

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


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

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

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

谷歌发布了Closure Compiler,它似乎正在生成最小的文件。

在此之前,各种选项如下

基本上,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在注释Compressorrater中提到,它显示Packer在最佳压缩率方面领先于图表,因此我猜是ymmv


YUI Compressor是必经之路。它具有很高的压缩率,经过了良好的测试,并在许多顶级站点中得到使用,并且,我个人建议这样做。

我已经将它用于我的项目,而没有一个JavaScript错误或打h。而且它有很好的文档。

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

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


我在Dojo项目中使用ShrinkSafe-这是个例外,因为它实际上使用JavaScript解释器(Rhino)来处理代码中的符号并了解其范围等,这有助于确保代码在出现时能正常工作。另一端,与许多使用regex进行压缩的压缩工具相反(不那么可靠)。

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

编辑:顺便说一下,"最佳"是有争议的,因为"最佳"的标准将根据项目的需求而变化。就个人而言,我认为ShrinkSafe是一个很好的平衡点。对于某些认为最小尺寸==最佳的人来说,这将是不够的。

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


尝试JSMin,获得C#,Java,C和其他端口,并且也很容易获得。


如果您使用Packer,则只需选择"缩小变量"选项并gzip压缩结果代码即可。仅当服务器无法发送压缩文件时,base62选项才适用。带有"收缩变量"的Packer可以更好地压缩YUI,但是如果您在某处跳过了分号,则可能会引入错误。

base62基本上是一个穷人的gzip,这就是为什么gzip压缩base62版本的代码比gzip缩小收缩代码的代码能为您提供更大的文件。


JSMin是另一个。


In searching silver bullet, found this
question. For Ruby on Rails
http://github.com/sstephenson/sprockets


精简后,Js Crush是一个很好的压缩器。


KJS压缩

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

Kjscompress/csskompress is set of two
applications (kjscompress a
csscompress) to remove non-significant
whitespaces and comments from files
containing JavaScript and CSS. Both
are command-line applications for
GNU/Linux operating system.


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


这是一个YUI压缩器脚本(Byuic),该脚本查找所有js并沿着路径移动css并压缩/(可选)对它们进行模糊处理。很高兴集成到构建过程中。


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


推荐阅读