当前位置:  开发笔记 > 编程语言 > 正文

最好的JavaScript压缩器

如何解决《最好的JavaScript压缩器》经验,为你挑选了5个好方法。

什么是最好的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:哦,它也可以"美化".;-)



1> 小智..:

我最近发布了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:哦,它也可以"美化".;-)


我们在企业级应用程序中使用uglify.它做得很好.

2> Pat..:

几年后重新审视这个问题,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


不要忘记打包机的缺点 - 减压时间.

3> kamens..:

YUI Compressor是要走的路.它具有很好的压缩率,经过充分测试,并在许多顶级网站中使用,而且,我个人推荐.

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

我从未使用过它的CSS压缩功能,但它们也存在.CSS压缩也可以.

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


Packer在文件大小方面看起来很好,但事实证明,解压缩所花费的时间通常超过了通过管道传输较小文件的时间增益.我见过的大多数实际浏览器基准测试都比使用gzip的原始未压缩文件在浏览器中执行的时间要慢.

4> Jason Buntin..:

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

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

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

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



5> chakrit..:

尝试使用JSMin,获得C#,Java,C和其他端口,也可以随时使用.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有