Gzip与压缩的比较

138

我前几天就JavaScript和CSS文件的压缩问题与一个更喜欢使用Gzip的人进行了相当热烈的讨论。

为方便叙述,我将此人称为X。

X认为Gzip已经对代码进行了最小化处理,因为它压缩了你的文件。

我不同意。Zip是一种无损缩小文件大小的方法。无损意味着原始数据必须完美恢复,这意味着必须存储信息以使得空格、不需要的字符、注释代码以及其他所有东西都能被恢复。这需要占用更多的空间,因为需要压缩更多内容。

我没有测试的方法,但我相信对于以下代码的Gzip:

.a1 {
    background-color:#FFFFFF;
    padding: 40px 40px 40px 40px;
}

这段代码的 Gzip 压缩后仍然比此处的大小更大:

.a1{body:background-color:#FFF;padding:40px}

有没有人能够证明这个观点的正确性或错误性。
请不要说“它是正确的,因为这是我一直使用的”。

我在这里是在寻求科学证明。


50
查看极小文件时,尽量不要关注压缩结果。请注意,deflate和gzip会产生一些开销,因此当文件大小很小时,开销的影响会更大。请理解这一点。 - Min
9
有道理。然而,我不打算用成百上千行的CSS / JS来把你们搞得烦死,因为上面展示的代码已经很好地展示了我想要研究的原理。 - KdgDev
@JamesMcMahon 有道理,但不是答案。 - Abby Chau Yu Hoi
值得注意的一件事是缓存限制(它因浏览器而异),但某些移动浏览器基于未压缩文件大小进行缓存,在这种情况下,代码压缩是您的好朋友。此外,我有一个2兆字节的JavaScript Web应用程序(包括评论、ReactJS和其他所有内容),当经过代码压缩(Uglify)和Gzip压缩(使用Zopfli压缩)后,大小为75k(仅代码压缩大约为200k)。 - vipero07
13个回答

0

当然,“人类”有损压缩可以保留布局或其他重要内容,并删除任何不需要的垃圾(空格、注释、冗余等),这将比无损 gZip 压缩更好。

例如,像标记或函数名称之类的东西很可能具有一定的长度来描述含义。用一个字符长的名称替换它将节省大量空间,这在无损压缩中是不可能的。

顺便说一句,对于 CSS,有像 CSS compressor 这样的工具可以为您完成有损工作。

然而,当结合“有损优化”和无损压缩时,您将获得最佳结果。


0

当然可以进行测试 - 将您的内容写入文件中并使用zlib进行gzip压缩。您也可以尝试使用"gzip"实用程序。

回到您的问题 - 源长度和压缩结果之间没有明确的关系。关键点在于'熵'(源中每个元素有多不同)。

因此,这取决于您的源代码。例如,大量连续空格(例如,> 1000)可能会被压缩为与少量空格(例如,< 10)相同的大小。


-1

你说得没错,缩小+gzip可以减少字节数。但没有科学证据。

为什么你没有测试方法?

将代码缩小到一个文件中,另一个则保持“未缩小”。上传到能够gzip输出的Web服务器(例如Apache的mod_deflate),安装Firefox的Firebug扩展程序,清除缓存并访问这两个文件。 Firebug的“NET”选项卡将包含传输的准确数据量,进行比较,这样就有了“经验证”的证明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接