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

这两种方法为LAMP服务器提供的html,css和javascript文件提供了哪些优势。 有更好的select吗?

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

另请参见selectgzip而不是压缩http压缩涉及到性能问题吗?

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

简单的答案是


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由RFC 1952 [25]中描述的文件压缩程序“gzip”(GNU zip)产生的编码格式。 这种格式是带有32位CRC的Lempel-Ziv编码(LZ77)。

RFC 1952将压缩数据定义为:

该格式目前使用DEFLATE压缩方法,但可以很容易地扩展到使用其他压缩方法。

CRC-32 比ADLER32慢

与相同长度的循环冗余校验相比,它的速度可靠(优先select后者)。

所以…我们有2个压缩机制,它们使用相同的algorithm进行压缩,但使用不同的头和校验和algorithm。

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


多年来发现许多浏览器实施了不正确的放气algorithm。 而不是期望在RFC 1950中的zlib头,他们只是期望压缩的有效载荷。 同样的各种networking服务器也犯了同样的错误

所以,多年来浏览器开始实现一个模糊逻辑 deflate实现,他们尝试zlib头和阿德勒校验,如果失败,他们尝试有效载荷。

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

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


所以,最好的办法是完全避免放气,小的速度提升(由阿德勒32)是不值得的破损有效载荷的风险。

GZip只是简单的加上校验和和页眉/页脚。 但是,当我学会了艰难的道路时 , 放气 更快

gzip vs放气图

作为选项,您很可能无法真正select放气。 相反,你可能期望mod_deflate不使用deflate而是gzip。 因此,虽然大部分观点是有效的,但大多数观点可能并不相关。

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

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

mod_deflate需要较less的资源在您的服务器上,尽pipe您可能会在压缩量方面付出很小的代价。

如果您正在提供很多小文件,我build议您对压缩和未压缩解决scheme进行基准testing和加载testing – 您可能会发现某些情况下启用压缩不会节省成本。

gzip&deflate在解压缩方面应该没有任何区别。 Gzip只是放了几十个字节的头部,包括一个校验和。 校验和是压缩速度较慢的原因。 然而,当你预先压缩数以万计的文件时,你需要将这些校验和作为文件系统的完整检查。 另外,您可以使用命令行工具来获取文件的统计信息。 对于我们的网站,我们正在预压缩大量静态数据(整个开放目录,13,000个游戏,数百万个关键字的自动完成等),我们的排名比Alexa所有网站快95%。 传真search 。 但是,我们确实使用本土专有的Web服务器。 Apache / mod_deflate只是没有削减它。 当这些文件被压缩到文件系统中时,不仅会以最小的文件系统块大小打击文件,而且还会在文件系统中pipe理文件时产生不必要的开销,而Web服务器可能不在乎。 您的担心应该是总磁盘空间和访问/解压缩时间,以及能够以预先压缩的方式获取此数据的速度。 占用空间很重要,因为即使磁盘空间很便宜,您也希望尽可能地适应caching。

仅供将来参考:

在debian系统下(我在Ubuntu上)使用Apache2并且已经安装了deflate模块(默认情况下),您可以通过两个简单的步骤启用deflate压缩:

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

你走了! 我发现我的网页,我的adsl连接加载速度更快!

如果我没记错的话

  • gzip将压缩多一点放气
  • 放气更有效率