mod_deflate 与 mod_gzip

mod_deflate vs mod_gzip

提问人:Bachalo 提问时间:4/21/2012 最后编辑:Sumurai8Bachalo 更新时间:4/26/2019 访问量:30604

问:

有人可以告诉我以下脚本在 CPU 负载性能和压缩方面的差异吗?

<ifModule mod_gzip.c> 
mod_gzip_on Yes 
mod_gzip_dechunk Yes 
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ 
mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.* 
mod_gzip_item_include mime ^application/x-javascript.* 
mod_gzip_item_exclude mime ^image/.* 
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* 
</ifModule> 


<ifModule mod_deflate.c> 
<filesMatch "\.(js|css)$"> SetOutputFilter DEFLATE </filesMatch> 
</ifModule> 
apache gzip mod-deflate

答:

6赞 irl 3/2/2013 #1

大多数压缩算法在应用于纯文本文件时,可以将其大小减小 70% 或更多,具体取决于文件中的内容。使用压缩算法时,标准压缩级别和最大压缩级别之间的差异很小,尤其是在考虑处理这些额外压缩传递所需的额外 CPU 时间时。这在动态压缩 Web 内容时非常重要。大多数软件内容压缩技术使用 6 级(共 9 个级别)的压缩级别来节省 CPU 周期。级别 6 和级别 9 之间的文件大小差异通常非常小,以至于不值得花费额外的时间。

对于标识为 text/.* MIME 类型的文件,可以在将文件放在网络上之前对文件应用压缩。这同时减少了传输的字节数并提高了性能。测试还表明,Microsoft Office 和 PostScipt 文件可以进行 GZIP 编码,以便通过压缩模块进行传输。

一些无法进行 GZIP 编码的重要 MIME 类型是外部 JavaScript 文件、PDF 文件和图像文件。Javascript文件的问题主要是由于浏览器软件中的错误,因为这些文件实际上是文本文件,并且通过压缩传输将有利于整体性能。PDF 和图像文件已经被压缩,尝试再次压缩它们只会使它们变大,并导致浏览器出现潜在的渲染问题。

在将压缩文件发送到客户端之前,服务器必须确保接收数据的客户端正确理解并呈现压缩格式。了解压缩内容的浏览器会发送以下客户端请求标头的变体:

Accept-encoding: gzip

Accept-encoding: gzip, deflate 

当前的主要浏览器在发送的每个请求中都包含此消息的一些变体。如果服务器看到标头并选择提供压缩内容,则应使用服务器响应标头进行响应:

有关详细信息,请参阅以下文章:http://www.linuxjournal.com/article/6802

评论

8赞 Adam Tuttle 9/4/2014
这个答案提供了很多有用的信息,但根本没有解决这个问题:哪个是更好的选择,为什么?
2赞 thomasrutter 3/6/2018
此复制和粘贴作业甚至不会尝试回答实际问题。我不知道为什么它得到了积极的回应。
10赞 eyalzo 3/5/2013 #2

我猜你是在问这两者之间的区别,而不是一般的压缩。在这种情况下,我建议使用依赖于仍然活跃的项目 zlib 的mod_deflate。顺便说一句,比较两者的旧文章(6-7 岁)不再相关。

1赞 fotuzlab 8/20/2013 #3

看看这篇文章 linuxjournal.com

http://www.linuxjournal.com/article/6802

除此之外,mod_deflate 更容易配置,并且通常随 apache 包一起提供。

3赞 William Dresker 11/12/2014 #4

启用 mod_deflate 和 mod_gzip 基本上可以完成相同的操作,它们都会在将 Web 文件发送给您网站的访问者之前对其进行压缩。

不过,两者之间存在差异;mod_deflate有时可以有稍微好的压缩百分比作为mod_gzip。您应该选择mod_deflate的另一个原因是因为它mod_gzip更好地支持,这使得它更容易配置,因为它有更好的文档记录。更多信息可以在这里找到。

1赞 azazil 4/13/2017 #5

恕我直言,您应该避免将mod_deflate用于静态文件,而是通过具有最佳压缩率的mod_rewrite提供预压缩文件(7zip 创建了 gzip AFAIK)。Apache 不缓存 gzip 压缩的静态文件。

对于动态文件:取决于可用带宽 - mod_deflate需要大量的处理能力,但如果您的服务器能够溢出您的网络,则可以使用。

评论

0赞 Precastic 6/25/2017
-1 你的回答是基于意见的,没有任何可量化的东西来支持该意见。你需要根据你的用例权衡利弊。
1赞 azazil 6/26/2017
我认为我的评论陈述了显而易见的事情。Apache 在提供静态预压缩文件时可以提供大约 10 倍的文件。您可以节省大约 10% 的带宽,因为 7zip 会创建比 gzip 更小的 zip 文件。如果没有 gzipping,您也会有更好的响应时间。而且您正在浪费资源一遍又一遍地压缩相同的静态文件。总体而言,mod_deflate是一个很好的模块,但仅用于动态文件。
23赞 thomasrutter 10/25/2017 #6

这两个模块都做同样的事情:即时添加 gzip 压缩。

现在你应该使用的那个是mod_deflate - 它是更现代和推荐的,并与 Apache 一起分发。mod_gzip 是一个较旧的第三方实现,没有充分的理由再使用它。

不要被这些名称所迷惑,以为它们使用不同的压缩方案。它们都使用 gzip(这是一种使用称为 DEFLATE 的压缩算法的格式)。后者之所以被称为mod_deflate,是因为取了mod_gzip这个名字。它们都将在相同的设置下实现相同的压缩级别。

它们具有不同的配置(可能包括不同的默认设置),因此您需要查找正在使用的特定配置的文档。

评论

3赞 Kalnode 1/13/2018
经过几年的喋喋不休,终于有人发布了 OP 的实际答案。