YUI Compressor 是公认的最小化最佳工具,但 Closure 似乎可以更好。
7 回答
我认为“哪个最适合你”我认为是目前的一般答案 - YUI 的可用时间更长,因此无疑将是目前公认的最佳工具。而 Closure 对我们来说是新的 - 所以没有像 YUI 那样丰富的 Closure 经验。因此,我认为您不会仅仅因为它是新的,就根据人们的使用经验找到一个令人信服的现实世界论据来说明为什么要使用 Closure。
这并不是说您不应该使用 Closure....只是我的说法,我认为在许多人使用 2 并比较它们之前没有可用的答案。
编辑:有几个早期的比较,说 Closure 确实有改进:
http
://blog.feedly.com/2009/11/06/google-closure-vs-yui-min/ http://news.ycombinator .com/item?id=924426
进一步编辑:值得关注关闭问题列表:http ://code.google.com/p/closure-compiler/issues/list
从我看到的比较来看,在最小化文件大小方面,Closure 似乎是明显的赢家。本文使用三个流行的 JS 库(jQuery、Prototype、MooTools)来比较 YUI Compressor 和 Closure Compiler 之间的压缩:http: //www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor-Comparing-the- Javascript-压缩-Tools.aspx
Closure 在每次测试中都名列前茅,特别是在其高级模式下,它“通过提供近 60% 的压缩率,将代码大小比 YUI Compressor 减少了大约 20-25%”。
闭包可用于简单模式或高级模式。对于大多数 JavaScript 代码来说,简单模式是相当安全的,因为它只会重命名函数中的局部变量以进一步压缩。
高级模式更具侵略性。它将重命名对象字面量中的键,如果它可以确定它们返回没有副作用的简单值,则内联函数调用。
例如:
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"}
您可以在 google 的交互式Closure Compiler 站点上试用这些和其他示例。
看起来jQuery 1.5刚刚移至UglifyJS:
此外,通过这个开关,我们已经转向使用来自 Google Closure Compiler 的 UglifyJS。我们在使用它时看到了一些可靠的文件大小改进,所以我们对这个开关非常满意。
我认为这取决于您的代码。如果您想编译自己的代码,那么我认为值得修补代码以便它与Closure Compiler一起使用(有些事情在开始时可能看起来有点尴尬)。我相信Closure Compiler很快将成为此类工作的首选,它还会让你稍微整理一下代码并保持一致的风格(当然这取决于你的喜好,你可能讨厌某些部分,我喜欢 :P) .
如果您依赖其他库,那么在我看来,您应该稍等一下,直到它们发布Closure Compiler兼容版本。对于大多数流行的图书馆来说,它不应该花费太多时间。也许您可以为您自己使用的那些“不太活跃”的库提供修复。
我在这里谈论的是高级编译模式,正如一些人所指出的,简单编译模式使用起来相当安全。
这是一个不同的观点——谷歌关闭?我没有印象。这可能有点太苛刻了,但很好读。我想只有时间会证明哪个更好=)
截至 2012 年 10 月,看起来 YUI 压缩器现在已弃用,或者至少不再将在 YUI 中使用:http ://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor /
你可以在这里做一些测试,看看每个浏览器有什么更好的:http: //jsperf.com/closure-vs-yui