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

我应该使用YUI压缩器还是新的Google闭包编译器来压缩我的JavaScript?,javascript,yui-compressor,google-closure,google-closure-compiler,Javascript,Yui Compressor,Google Closure,Google Closure Compiler,YUI压缩机是共识中用于最小化的最佳工具,但闭包似乎可能会更好。我认为目前的一般答案是“您认为最适合您的”YUI可用时间更长,因此毫无疑问将是目前共识为最佳工具的工具。然而,闭包对我们来说是新的,所以闭包并不像YUI那样有丰富的经验。因此,我不认为你会发现一个令人信服的现实世界的论点,为什么仅仅因为闭包是新的,就根据人们的经验来使用闭包 这并不是说你不应该使用闭包……只是我的说法,我不认为有一个答案,直到很多人使用了这两个并比较了他们 编辑: 有几个早期的比较,说关闭确实会带来改进: 进一步

YUI压缩机是共识中用于最小化的最佳工具,但闭包似乎可能会更好。

我认为目前的一般答案是“您认为最适合您的”YUI可用时间更长,因此毫无疑问将是目前共识为最佳工具的工具。然而,闭包对我们来说是新的,所以闭包并不像YUI那样有丰富的经验。因此,我不认为你会发现一个令人信服的现实世界的论点,为什么仅仅因为闭包是新的,就根据人们的经验来使用闭包

这并不是说你不应该使用闭包……只是我的说法,我不认为有一个答案,直到很多人使用了这两个并比较了他们

编辑: 有几个早期的比较,说关闭确实会带来改进:

进一步编辑:
值得注意的是,关闭问题列表:

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

高级模式更具攻击性。它将重命名对象文本中的键,以及内联函数调用,前提是它可以确定它们返回的是没有副作用的简单值

例如:

function Foo()
{
  return "hello";
}

alert(Foo());
翻译为:

alert("hello");
alert({a:"Mike",b:"Koss"});
该代码:

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

alert("hello");
alert({a:"Mike",b:"Koss"});
通过引用以下名称,可以防止高级模式更改对象文字中的键值:

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

您可以在google的interactive上试用这些和其他示例。

我认为这取决于您的代码。如果您想编译自己的代码,那么我认为对代码进行修补是值得的,这样它就可以与闭包编译器一起工作(有些事情在开始时可能看起来有点尴尬)。我相信闭包编译器很快就会成为这类工作的首选,它也会让你稍微整理一下你的代码并保持一致的风格(当然这取决于你的喜好,你可能讨厌某些部分,我喜欢:P)

如果您依赖于其他库,那么在我看来,您应该等待一段时间,直到它们发布与闭包编译器兼容的版本。对于大多数流行的图书馆来说,这不需要太多时间。也许你可以为那些你自己使用的“不那么活跃”的库提供修复

我这里说的是高级编译模式,正如一些人指出的,简单的编译模式使用起来相当安全


这里有一个不同的观点-。这可能有点太苛刻了,但读起来不错。我想只有时间会告诉我哪一个更好=)

从我所看到的比较来看,在最小化文件大小方面,闭包似乎是明显的赢家。本文使用三个流行的JS库(jQuery、Prototype、MooTools)来比较YUI Compressor和Closure编译器之间的压缩:

Closure在每个测试中都处于领先地位,特别是在其高级模式中,它“通过提供近60%的压缩,将代码大小减少到比YUI Compressor多20-25%左右。”

看起来就像刚刚移动到:

此外,使用此开关,我们还可以 从 谷歌闭包编译器。我们已经看到 一些可靠的文件大小改进 在使用它时,我们非常高兴 用开关


您可以在此处进行一些测试,看看每个浏览器中有哪些更好:

截至2012年10月,YUI压缩机似乎已被弃用,或者至少不再在YUI中使用:

+1告诉我谷歌关闭的消息,我从来没有听说过:)我还要补充一点,这里有一个鲜为人知的包装商:据我所知,这是一个能给出最好结果的包装商,但你需要添加所有隐式分号,使用JSlint进行打包已经不受欢迎了,因为每次运行都需要解包。我想试试这个问题,看看自从第一次提出这个问题以来,这些年来是否有任何变化。这在很大程度上取决于您的编码风格,但在我的情况下,打包几乎总是创建比YUI compressor更大的文件。我最近才开始在一个项目中使用Google Closure Compiler,这个项目的结果比YUI compressor小得多。Closure Compiler甚至可以内联调用函数,极大地提高了代码的速度。闭包编译器将以简单模式内联函数,但不会跨全局函数。感谢您的发布。我甚至都没听说过!它比YUI更快,压缩量也更大,当然比安装Java for Closure编译器要好得多。不再正确:我看到
Compiler=${JS_ENGINE}${BUILD_DIR}/uglify.JS--Makefile中不安全的
,在他们的构建指令中说,“minified(w/uglify.JS),linted(w/JSHint)”,因为它不能让你逃脱
eval()
?YUI压缩机仍在开发中(最新版本为2013年5月):