【问题标题】:Is there any point to JavaScript minification if you have compression turned on?如果打开压缩,JavaScript 缩小有什么意义吗?
【发布时间】:2011-03-15 10:12:25
【问题描述】:

如果您的网站启用了 deflate/zip 压缩,那么 JavaScript 缩小是否有任何意义?

我的理论是压缩的缩小 JavaScript 文件和压缩的未缩小 JavaScript 文件之间的差异可以忽略不计。

很少有浏览器不支持压缩。我想有些机器人(蜘蛛)可能不支持压缩(我知道至少有一个),但它们不太可能对你的 JavaScript “感兴趣”,因为它们不太可能执行 JS,因此不应该下载它。

【问题讨论】:

  • 缩小会撕掉 cmets,减小的大小超出了单独压缩所能做的。
  • minified 在客户端解析速度更快,并且比单独压缩节省更多空间

标签: javascript minify


【解决方案1】:

请记住,缩小实际上丢弃信息。空白/cmets/冗长的变量名/等等...被完全丢弃(并且无法恢复)。

另一方面,服务器压缩需要无损,因此它不能丢弃任何信息。它只能压缩它。

因此,服务器压缩不能(理论上)达到 minificaiton 可以(理论上)实现的相同压缩水平。

Remember, though that while theory and practice are theoretically the same, in practice they never are。 :-)

【讨论】:

    【解决方案2】:

    查看 Yahoo 的开发者网站 - http://developer.yahoo.com/performance/rules.html - 了解为什么缩小和压缩是好的原因。另外,请查看 Steve Souders 的任何内容(High Performance Web Sites -- 很棒的网站和书籍!)。

    我会避免混淆,除非你真的想尽可能多地从你的脚本中挤出来。根据您编写 JavaScript 的方式,混淆可能会导致错误。缩小并获得 80-90% 的路径可能会更好。

    祝你好运!

    【讨论】:

      【解决方案3】:

      您还可以使用使用 base-62 编码之类的 JavaScript 压缩器/打包器(例如,this)。

      它可以将 72174 字节(jquery-1.4.2.min.js)变成大约 50640 字节。但是,与压缩文件的直接 gzip 压缩相比,进一步 gzip 压缩不会提高压缩率(也是 24K)。

      (如果您使用压缩器/打包器,您可能还需要保留许可证标头,在本示例中约为 400 个字节)。

      【讨论】:

      【解决方案4】:

      每个字节都很重要。节省的越多越好。

      【讨论】:

        【解决方案5】:

        让我们测试一下。我使用 jQuery 1.4.2 和 gzip(没有标志;-9 似乎没有显着差异)得到以下数字。

        • 开发:163,855 字节
        • 开发,压缩:45,994 字节
        • 缩小:72,174 字节
        • 缩小、压缩:24,565 字节

        因此,在这种特殊情况下,缩小使文件几乎缩小了两倍。不可否认,开发版本中充满了 cmets。让我们把它们去掉,看看会发生什么:

        • 已剥离:131,155 字节
        • 剥离、压缩:32,914 字节

        这仍然比缩小版大很多。

        【讨论】:

          【解决方案6】:

          我相信缩小版会运行得更快。变量现在有 1-2 个字形长,因此解析更快,空格和 cmets 不是问题。当然,您需要设计一个测试才能真正分辨任何差异。

          移动平台的压缩有利有弊。是的,它的下载速度有点快,但解压确实会消耗电池寿命。

          --戴夫

          【讨论】:

            【解决方案7】:

            我尝试压缩原始版本和缩小版本的 jquery-1.3.2:

            jquery-1.3.2.js      118 kb  ->  36 kb
            jquery-1.3.2.min.js   56 kb  ->  20 kb
            

            因此,压缩前缩小确实有很大的不同。

            【讨论】:

            • 这很有趣。除了删除 cmets 之外,还有什么关于为什么会这样的猜测?
            • 缩小使代码更加同质化,这意味着它可以被更好地压缩。你有更少的“噪音”(长变量名)和更多相同的符号()[]{}等,这允许更高的压缩率,就像一个充满零的文件在压缩时最终会比一个带有实际数据的文件小(这不是全零等)
            • 当然,如果您使用的是重命名变量的缩小,那是有意义的。那不是更像闭包编译器吗?我在考虑只删除空格和 cmets 的类型。
            【解决方案8】:

            在 gzip 之前压缩文件会对服务器性能产生轻微影响,但我怀疑这会增加多少。缩小会删除 cmets,而 gzip/deflate 不会,但除此之外,我会说你是正确的。

            当然,总是有 IE6。以我的经验,当涉及到除 text/html 之外的任何内容时,此浏览器是不可靠的。不过,随着 IE6 的使用率持续下降,这几乎已经到了无关紧要的地步。

            【讨论】:

            • 几乎到了无所谓的地步?我希望我的客户也有同样的看法。这就像“有点怀孕”的比喻:只要你的一个客户坚持支持 IE6,你就必须支持它。我真希望微软能以某种方式强迫这个问题并完全摆脱它。
            • 当然,如果您在做客户工作,这取决于他们。如果没有,那是你的判断——最近只有 2.5% 的与我合作的网站的访问者使用 IE6。我们仍然支持它,但如果我们不支持它,可能影响不会很大。我希望在大约一年后不再担心它。
            • MS 可以通过提供从旧版 InfoPath 到 InfoPath 2010 的免费升级来帮助解决这个问题。我在企业界的许多 IE6 用户代理字符串中看到“InfoPath”(通过一个网站仍然有大约 30% 的 IE6 losers 用户)。显然,如果您使用旧的 InfoPath 安装 IE7,事情就会中断。
            猜你喜欢
            • 2015-02-10
            • 2011-05-04
            • 2011-02-05
            • 2012-01-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多