【问题标题】:Is there a benefit to minifying JavaScript before gzipping it?在 gzip 压缩之前缩小 JavaScript 有什么好处吗?
【发布时间】:2011-02-05 02:26:56
【问题描述】:

在压缩之前缩小是否有一些有效的目的?如果首先缩小 gzip 压缩文件,它似乎不太可能更小。

我之所以这么问,是因为在缩小代码中诊断生产问题要困难得多,我想知道人们是否无缘无故地接受这些问题。

【问题讨论】:

  • 这真的很容易检查......你应该使用你的实际文件;或者不用担心,只需 gzip
  • 我刚刚在我这里的一个文件上试过这个。解压后为 160kb,打包后为 56kb。使用相同的设置进行 Gzip 压缩,解压后的为 28kb,打包后的为 23kb。
  • @Steve,看看 Compressor Rater,你可以将你的代码与各种流行的缩小工具进行比较,无论是否有额外的 gzip 压缩效果:compressorrater.thruhere.net
  • question 并非完全重复,但Gzip versus minifyanswers 包含一些人的基准,可以彻底解决这个问题。基本上,与您的直觉相反,您在此处描述为“极不可能”的内容是事实:压缩和 gzip 压缩的代码 明显小于仅 gzip 压缩的代码。

标签: javascript gzip minify


【解决方案1】:

是的,肯定有好处。

压缩是一种有损压缩,而 gzipping 是无损压缩。因此,通过缩小您删除不需要的数据(如 cmets 和长变量名),这将始终有助于使您的文件更小。即使使用 gzip,在大多数情况下仍然会有所不同。

例子:

function foo(this_is_my_variable){
    var this_is_my_other_variable = 0;
    this_is_my_other_variable = this_is_my_other_variable + this_is_my_variable;
    return this_is_my_other_variable;
}

这可能会缩小为:

function foo(a){
    var b = 0;
    b = b +a;
    return b;
}

或者如果缩小器很聪明:

function foo(a){
    return a;
}

所有代码都给出相同的结果,但大小差别很大。

【讨论】:

  • gzip 也会使重复的“this_is_my_variable”更短。您的三个示例 gzip 到 98、70 和 51 个字节。
  • 确实,缩小器通过切换 cmets 来提供帮助;缩短长变量名并不是真的有帮助,因为 gzip 的 deflate 已经很好地处理了这个问题(在这种情况下,唯一可以从缩小中受益的是字典大小。)
  • 虽然程度可能不一样。
  • 缩小器有时可能聪明。上面的“智能缩小”版本并不总是产生与未修改版本相同的结果(尝试发送字符串,或者根本不发送参数)。如果已知尝试“超级智能”,则必须小心调用压缩器时使用的选项。就个人而言,如果我完全缩小,我很少使用更激进的设置。 gzip 带我走了很长一段路:)
  • @npup:绝对正确,一些缩小器也因缺少尾随 ; 而中断。就我个人而言,我总是使用 YUI 压缩器来缩小我的文件。缩小足够但不会导致任何问题。
【解决方案2】:

也许吧。除了删除空格之外,缩小 JavaScript 可能会导致相同文本的更多重复,这可能意味着 gzip 的压缩率更高。幸运的是,由于 gzip 命令行工具(在 *nix 和 available for Windows 中很常见)使用相同的压缩算法(尽管格式不完全相同),因此很容易进行前后处理。

【讨论】:

    【解决方案3】:

    当我在 gzip 之前缩小时,我总是看到最终字节数明显减少。

    我有一个 20 分钟的 hack 工作 php 脚本,它与 yui 压缩器和 google 的闭包编译器交互。它显示了我之前和之后的字节,包括 gzip 之后,所以我很容易检查。

    【讨论】:

      【解决方案4】:

      至于原始文件大小,这里是一个示例(jQuery 1.4.2):

      $ curl http://code.jquery.com/jquery-1.4.2.js | gzip > jquery.gz
      $ curl http://code.jquery.com/jquery-1.4.2.min.js | gzip > jquery-min.gz
      
      $ ls -la jquery*
      -rw-r--r--  1 me  staff  24545 Apr  7 12:02 jquery-min.gz
      -rw-r--r--  1 me  staff  45978 Apr  7 12:02 jquery.gz
      

      所以缩小版大约是一半大小。

      【讨论】:

        【解决方案5】:

        它还可以帮助加快浏览器中 javascript 代码的解析速度。根据文件的大小,浏览器可能会花费大量时间来解析和标记文件,这将通过缩小来减少。

        当然,只有基准测试和分析才能告诉您这是否真的对您的特定情况有益。

        我发现最好的方法是在我的网站上保留所有 .js 文件的缩小版本和非缩小版本,并且只需使用配置开关在两者之间切换。这样,正常生产可以使用缩小版本,然后如果我必须调试某些东西,只需拨动开关,就会提供非缩小版本。 (当然,构建过程确保缩小版和非缩小版是同步的)

        【讨论】:

        • 你不应该真的在生产网站上调试。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 2013-05-17
        • 2014-04-10
        • 2011-03-15
        • 1970-01-01
        • 2019-07-05
        • 1970-01-01
        相关资源
        最近更新 更多