你用什么来最小化和压缩JavaScript库?
我已经使用了YUI Compressor很长一段时间并没有遇到任何问题,但最近开始使用Google Closure Compiler并取得了一些成功.到目前为止我对它的印象:
它在文件大小减少方面通常优于YUI Compressor.在简单模式上少量,在高级模式上有很多.
到目前为止,简单模式与YUI Compressor一样可靠.没有我喂过它已经显示出任何问题.
高级"编译"模式对于某些脚本来说非常有用,但是脚本的大幅减少是以牺牲大量干扰代码为代价的.有一些方法可以解决其中的一些问题并理解它正在做什么可以大大有助于避免问题但我通常避免使用这种模式.
我已经转而使用Google Closure Compiler进行简单的"编译"模式,因为它总体上略胜于YUI Compressor.我使用它比使用YUI Compressor少得多,但从我到目前为止看到的我推荐它.
另一个我尚未尝试但听起来很有希望的是Mihai Bazon的UglifyJS.
我使用YUI Compressor.似乎能很好地完成工作!
你在这里有一堆可能性:
其他答案提到的YUI Compressor,
在谷歌关闭编译器,
该Dojo工具包通过其使用的ShrinkSafe的编译器编译 系统,
道格拉斯· 克罗克福德仍然是真正的JSMin,
UglifyJS被其他人提及,
和商业解决方案,javaScript Obfuscator(从未个人使用)
根据我的个人经验,我建议你使用Dojo SDK构建一个自定义构建,然后你可以配置为使用他们通常的ShrinkSafe编译器,或者他们现在支持的 Google Closure .
在压缩方面,我认为Google Closure是迄今为止产生最佳结果的产品,但我对ShrinkSafe感到满意,它有点老了,而且更强大,而Closure Compiler在块上看起来有点像新手(例如,您的利益相关者可能不太喜欢).
有些人发誓只有YUI Compressor.我个人不能保证它.
现在,如果您质疑的是压缩库而不仅仅是您自己的JavaScript代码,那么它显然会更加复杂,因为您需要大多数这些工具来导出不应重命名或剥离的符号.最理想的压缩器将删除他们认为未使用的函数 - 通常是库中的情况,如果没有绑定到项目,显然 - 并更改名称以缩短它们并使用更少的字符 - 这也是一个问题,因为你显然想要公开API不会被篡改.
您还可以在此主题中找到其他主题,并在工具的支持文档中查找信息.您可能还想看看JSBuilder2,它是Dojo的Build工具的一些吊坠(因此,使用ShrinkSafe或Closure Compiler)用于ExtJS(使用YUI压缩器).
(抱歉,作为新的SO用户,我无法添加多个链接,因此无法直接链接到工具.)
编辑:关于在一些答案中表达的担忧,压缩可能会引入错误,并且由于代码没有被破坏,它使调试变得更容易:是的,这是一个有效的问题.然而:
如果使用minifier,即使激活了gzip压缩,你的带宽也会得到非常显着的改善(你可以通过让压缩器的生活变得更轻松来学习利用gzip压缩
您应该在调试和生产模式下品尝您的代码,以确保行为完全相同.我的意思是,这也是你工作的一部分......
其中一些压缩器已存在一段时间,并不会真正在您的代码中引入错误.他们真的只是重新组织事物并取代字符串.
一些压缩器(例如dojo构建系统)提供了允许您生成压缩和未压缩输出的选项,以便您可以使用查询参数启用不同的调试和生成模式.
我根本没有最小化JavaScript:gzip压缩对我来说足够好,并且还有一个额外的好处,即错误消息仍然有用.
我也使用YUI Compressor.我在我的项目中使用了这样的ant任务:
Dean Edward的打包器实现了一些非常好的压缩比.它具有命令行实现,允许它在持续集成过程中使用.
UglifyJS是一个新的.
UglifyJS比YUI Compressor压缩得更好,与Google Closure Compiler差不多.例如,来自Google Closure Compiler的jQuery的压缩版本仅比UglifyJS生成的版本小403字节 - 令人印象深刻!UglifyJS也是最快的一次击球,击败Closure超过6秒!
此外,UglifyJS生成的代码比Closure生成的代码更安全.例如,Closure不知道如何处理eval或使用{} - 它只记录错误并继续重命名变量.显然,这会导致代码损坏.UglifyJS没有这个问题.
更多信息可以在这里找到:http: //badassjs.com/post/971960912/uglifyjs-a-fast-new-javascript-compressor-for-node-js