我应该使用YUI Compressor还是新的Google Closure编译器来压缩我的JavaScript?

YUI压缩机是最小化的共识最好的工具,但闭合看起来可能会更好。

“无论你最适合你”我认为是目前的一般答案 – YUI已经可用了很长时间,所以毫无疑问将是目前已经成为最佳工具的共识。 鉴于封闭对我们来说是新的 – 所以对封闭没有丰富的经验,就像YUI一样。 因此,我不认为你会发现一个令人信服的现实世界的理由,因为它是新的,基于人们的经验,为什么要使用Closure。

这并不是说你不应该使用Closure ….只是我的方式说,我不认为有一个答案可用于这个,直到有一些人使用2,并进行了比较。

编辑:有几个早期的比较,说封闭确实有所改善: http : //blog.feedly.com/2009/11/06/google-closure-vs-yui-min/
http://news.ycombinator.com/item?id=924426

进一步编辑:值得关注closures问题列表: http : //code.google.com/p/closure-compiler/issues/list

从我看到的比较来看,Closure似乎在减less文件大小方面是明显的赢家。 本文使用三个stream行的JS库(jQuery,Prototype,MooTools)来比较YUI Compressor和Closure Compiler之间的压缩: http : //www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor-Comparing-the- Javascript的压缩,Tools.aspx

在每次testing中都会收到封闭的结果,特别是在高级模式下,通过提供接近60%的压缩率,代码尺寸比YUI压缩机的代码量减less了20-25%。

closures可以在简单模式或高级模式下使用。 简单模式对于大多数JavaScript代码来说是相当安全的,因为它只是重命名函数中的局部variables以获得进一步的压缩。

高级模式更具侵略性。 如果可以确定它们返回没有副作用的简单值,它将重命名对象文字中的键和内联函数调用。

例如:

function Foo() { return "hello"; } alert(Foo()); 

被翻译成:

 alert("hello"); 

而这个代码:

 var o = {First: "Mike", Last: "Koss"}; alert(o); 

被翻译成:

 alert({a:"Mike",b:"Koss"}); 

您可以通过引用名称来防止高级模式更改对象文字中的键值:

 {'First': "Mike", 'Last': "Koss"} 

你可以在谷歌的交互式Closure编译器网站上试试这些和其他的例子。

看起来像jQuery 1.5刚搬到UglifyJS :

另外,通过这个开关,我们已经开始使用Google Closure Compiler中的UglifyJS。 我们已经看到一些可靠的文件大小改进,所以我们对交换机非常满意。

我认为这取决于你的代码。 如果你想编译你自己的代码,那么我认为值得修补代码,以便它可以与Closure Compiler一起工作 (有些事情在开始时可能有些尴尬)。 我相信Closure Compiler很快就会成为这样的工作的首选,它也会让你整理你的代码并保持一致的风格(当然这取决于你的喜好,你可能讨厌一些部分,我这样做:P) 。

如果你依赖于其他库,那么在我看来,你应该等一下,直到他们发布Closure Compiler兼容版本。 那里的大多数stream行图书馆不应该花太多时间。 也许你可以为自己使用的那些“不那么活跃”的库提供修复。

我在这里讲的是高级编译模式,有些人指出的简单编译模式使用起来相当安全。

这里有一个不同的意见 – 谷歌closures? 我不感到印象深刻 。 这可能有点太苛刻,但很好的阅读。 我想只有时间会告诉哪一个更好=)

截至2012年10月,看起来像YUI压缩机现在已经被弃用,或者至less不再用于YUI: http : //www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor /

你可以在这里做一些testing,看看每个浏览器中的更好: http : //jsperf.com/closure-vs-yui