对于LAMP服务器提供的html、css和javascript文件,这两种方法都有什么好处?有没有更好的选择?

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

是否有任何性能打击涉及选择gzip而不是deflate的http压缩?


当前回答

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

简单的答案是不要。


RFC 2616将通缩定义为:

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

在RFC 1950中,zlib格式被定义为:

     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慢

与相同长度的循环冗余检查相比,它以可靠性换取速度(更倾向于后者)。

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

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


事实证明,多年来许多浏览器实现了错误的deflate算法。在RFC 1950中,他们只是期望压缩的有效负载,而不是期望zlib报头。类似的,各种网络服务器也犯了同样的错误。

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

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

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


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

其他回答

GZip只是deflate加上一个校验和和页眉/页脚。不过,我从惨痛的教训中学到,通缩的速度更快。

(来源:typepad.com)

如果我没记错的话

Gzip将压缩比deflate多一点 通缩更有效

实际上,你可能无法选择通缩作为一个选项。与你所期望的相反,mod_deflate使用的不是deflate而是gzip。因此,虽然大多数观点都是正确的,但可能与大多数人无关。

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

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

简单的答案是不要。


RFC 2616将通缩定义为:

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

在RFC 1950中,zlib格式被定义为:

     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慢

与相同长度的循环冗余检查相比,它以可靠性换取速度(更倾向于后者)。

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

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


事实证明,多年来许多浏览器实现了错误的deflate算法。在RFC 1950中,他们只是期望压缩的有效负载,而不是期望zlib报头。类似的,各种网络服务器也犯了同样的错误。

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

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

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


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