216

对于 LAMP 服务器提供的 html、css 和 javascript 文件,这两种方法都有哪些优势。有更好的选择吗?

服务器使用 Json 向地图应用程序提供信息,因此需要大量的小文件。

另请参阅在 http 压缩中选择 gzip 而不是 deflate 是否会对性能造成影响?

4

9 回答 9

319

为什么对 Apache 提供的文本文件使用 deflate 而不是 gzip?

简单的答案是不要


RFC 2616将 deflate 定义为:

deflate RFC 1950 中定义的“zlib”格式与 RFC 1951 中描述的“deflate”压缩机制相结合

zlib 格式在RFC 1950中定义为:

     0   1
     +---+---+
     |CMF|FLG|   (more-->)
     +---+---+

       0   1   2   3
     +---+---+---+---+
     |     DICTID    |   (more-->)
     +---+---+---+---+

     +=====================+---+---+---+---+
     |...compressed data...|    ADLER32    |
     +=====================+---+---+---+---+

所以,一些标头和一个 ADLER32 校验和

RFC 2616 将 gzip 定义为:

gzip 由文件压缩程序“gzip”(GNU zip)产生的一种编码格式,如 RFC 1952 [25] 中所述。此格式是具有 32 位 CRC 的 Lempel-Ziv 编码 (LZ77)。

RFC 1952将压缩数据定义为:

该格式目前使用 DEFLATE 压缩方法,但可以轻松扩展以使用其他压缩方法。

CRC-32比 ADLER32 慢

与相同长度的循环冗余校验相比,它以可靠性换取速度(更喜欢后者)。

所以......我们有 2 种压缩机制,它们使用相同的压缩算法,但对标头和校验和使用不同的算法。

现在,底层的 TCP 数据包已经相当可靠了,所以这里的问题不是 GZIP 使用的 Adler 32 vs CRC-32


事实证明,多年来许多浏览器实施了不正确的放气算法。他们不期望 RFC 1950 中的 zlib 标头,而是期望压缩的有效负载。同样,各种网络服务器也犯了同样的错误。

因此,多年来,浏览器开始实现模糊逻辑deflate 实现,他们尝试 zlib 标头和 adler 校验和,如果失败,他们尝试有效负载。

具有这样复杂逻辑的结果是它经常被破坏。Verve Studio 有一个用户贡献的测试部分,显示情况有多糟糕。

例如:deflate 在 Safari 4.0 中工作,但在 Safari 5.1 中被破坏,它在 IE 上也总是有问题。


所以,最好的办法是完全避免放气,轻微的速度提升(由于 adler 32)不值得冒有效载荷损坏的风险。

于 2012-03-25T00:20:09.613 回答
172

GZip 只是简单地放气加上校验和和页眉/页脚。不过, Deflate更快,因为我学到了很多东西。

gzip与放气图

于 2008-12-23T11:00:12.857 回答
16

您可能无法实际选择放气作为选项。与您可能期望的相反, mod_deflate不是使用 deflate 而是 gzip。因此,虽然提出的大多数观点都是有效的,但它可能与大多数人无关。

于 2012-12-12T10:49:21.407 回答
4

主要原因是 deflate 比 gzip 编码更快,并且在繁忙的服务器上可能会有所作为。对于静态页面,这是一个不同的问题,因为它们可以很容易地预压缩一次。

于 2008-12-23T10:54:31.060 回答
4

我认为 deflate 和 gzip 之间没有太大的区别,因为 gzip 基本上只是一个包裹 deflate 的标头(参见 RFC 1951 和 1952)。

于 2008-12-23T10:56:58.013 回答
2

mod_deflate 在您的服务器上需要较少的资源,尽管您可能会在压缩量方面付出一点代价。

如果您要提供许多小文件,我建议您对压缩和未压缩的解决方案进行基准测试和负载测试 - 您可能会发现在某些情况下启用压缩不会带来节省。

于 2008-12-23T11:05:46.670 回答
0

gzip 和 deflate 解压缩应该没有任何区别。Gzip 只是压缩了几十个字节的标头,包括一个校验和。校验和是压缩速度较慢的原因。但是,当您预压缩大量文件时,您希望将这些校验和作为文件系统中的健全性检查。此外,您可以利用命令行工具获取文件的统计信息。对于我们的网站,我们预压缩了大量静态数据(整个开放目录、13,000 款游戏、数百万关键字的自动完成等),我们的 Alexa 排名比所有网站快 95%。 传真搜索. 但是,我们确实使用了自制的专有网络服务器。Apache/mod_deflate 只是没有削减它。当这些文件被压缩到文件系统中时,您不仅会以最小的文件系统块大小对文件进行打击,而且还会在管理文件系统中的文件时产生所有不必要的开销,而 Web 服务器可能不太关心。您关心的应该是总磁盘占用空间和访问/解压缩时间,其次是能够预压缩此数据的速度。占用空间很重要,因为即使磁盘空间很便宜,您也希望尽可能多地放入缓存中。

于 2009-10-20T15:51:27.480 回答
-1

在已安装 Apache2 和 deflate 模块(默认情况下)的 Ubuntu 上,您可以通过两个简单的步骤启用deflate gzip 压缩:

a2enmod deflate
/etc/init.d/apache2 force-reload

而你走了!我发现通过我的 adsl 连接提供的页面加载速度更快。

编辑:根据@GertvandenBerg 的评论,这启用了gzip 压缩,而不是放气。

于 2009-04-22T14:18:30.497 回答
-6

如果我没记错的话

  • gzip 会比 deflate 压缩一点
  • 放气更有效
于 2008-12-23T10:56:34.020 回答