【问题标题】:Should I use the YUI Compressor or the new Google Closure compiler to compress my JavaScript?我应该使用 YUI Compressor 还是新的 Google Closure 编译器来压缩我的 JavaScript?
【发布时间】:2010-12-13 18:33:11
【问题描述】:

YUI Compressor 是公认的最小化最佳工具,但 Closure 似乎可以更好。

【问题讨论】:

  • +1 告诉我有关 Google Closure 的事,我从未听说过 :)
  • 我还要补充一点,这里有一个鲜为人知的打包程序:dean.edwards.name/packer 据我所知,这是提供最佳结果的打包程序,但您需要添加所有隐式分号,使用 JSlint为此
  • packer 已经失宠,因为它需要在每次运行时解压。
  • 我想解决这个问题,看看自从第一次提出这个问题以来这些年来是否有任何变化
  • 这在很大程度上取决于您的编码风格,但在我的情况下,Packer 几乎总是创建比 YUI 压缩器更大的文件。我最近才开始在一个项目中使用 Google Closure Compiler,对于那个项目,它给我的结果比 YUI 压缩器要小。

标签: javascript yui-compressor google-closure google-closure-compiler


【解决方案1】:

“你觉得哪个最适合你”我认为是目前的一般答案 - 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

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

【讨论】:

    【解决方案2】:

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

    Closure 在每个测试中都排在前面,特别是在其高级模式下,它“通过提供近 60% 的压缩率,将代码大小比 YUI Compressor 减少了大约 20-25%。”

    【讨论】:

      【解决方案3】:

      闭包可用于简单模式或高级模式。简单模式对于大多数 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 site 上试用这些和其他示例。

      【讨论】:

      • Closure Compiler 甚至会内联提取函数的核心,从而显着加快代码速度。
      • 闭包编译器将在简单模式下内联函数,但不会跨全局函数。
      【解决方案4】:

      看起来jQuery 1.5 刚刚移至UglifyJS

      此外,我们还通过此开关 转移到使用 UglifyJS 从 谷歌闭包编译器。我们见过 一些可靠的文件大小改进 在使用它时,我们很高兴 用开关。

      【讨论】:

      【解决方案5】:

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

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

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

      这是一个不同的意见 - Google Closure ? I'm Not Impressed。这可能有点太苛刻了,但很好读。我想只有时间会证明哪个更好=)

      【讨论】:

      • 因为它不会让你逃脱 eval()?
      【解决方案6】:

      截至 2012 年 10 月,YUI 压缩器似乎已被弃用,或者至少不再将在 YUI 中使用:http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor/

      【讨论】:

      【解决方案7】:

      你可以在这里做一些测试,看看每个浏览器有什么更好的地方: http://jsperf.com/closure-vs-yui

      【讨论】:

        猜你喜欢
        • 2013-11-13
        • 2012-08-03
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        • 2010-12-14
        相关资源
        最近更新 更多