mod_deflate 与 mod_gzip

Posted

技术标签:

【中文标题】mod_deflate 与 mod_gzip【英文标题】:mod_deflate vs mod_gzip 【发布时间】:2012-05-02 14:00:18 【问题描述】:

谁能告诉我以下脚本在 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> 

【问题讨论】:

Why use deflate instead of gzip for text files served by Apache?的可能重复 mod_deflate or mod_gzip, which should be used?的可能重复 【参考方案1】:

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

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

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

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

【讨论】:

经过几年和一些喋喋不休,终于有人发布了对 OP 的实际答案。【参考方案2】:

恕我直言,您应该避免对静态文件使用 mod_deflate,而是通过 mod_rewrite 提供具有最佳压缩效果的预压缩文件(7zip 创建的 gzip AFAIK)。 Apache 没有缓存 gzip 后的静态文件。

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

【讨论】:

-1 您的回答是基于意见的,没有任何可量化的内容来支持该意见。您需要根据您的用例权衡利弊。 我认为我的评论说明了显而易见的事情。在提供静态预压缩文件时,Apache 可以提供大约 10 倍的文件。您可以节省大约 10% 的带宽,因为 7zip 创建的 zip 文件比 gzip 更小。无需 gzip 压缩,您的响应时间也会更好一些。而且您正在浪费资源一遍又一遍地压缩相同的静态文件。总体而言 mod_deflate 是一个不错的模块,但仅用于动态文件。【参考方案3】:

启用 mod_deflate 和 mod_gzip 基本上完成了同样的事情,它们都在将您的 Web 文件发送给您网站的访问者之前对其进行压缩。

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

【讨论】:

【参考方案4】:

在 linuxjournal.com 上查看这篇文章

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

除此之外,mod_deflate 更易于配置,通常随 apache 软件包提供。

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

大多数压缩算法在应用于纯文本文件时,可以将其大小减少 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

【讨论】:

这个答案提供了很多有用的信息,但根本没有解决这个问题:哪个是更好的选择,为什么? 这项复制和粘贴作业甚至不尝试回答实际问题。我不知道为什么它受到了好评。

以上是关于mod_deflate 与 mod_gzip的主要内容,如果未能解决你的问题,请参考以下文章

Apache网页优化

Apache网页优化

httpd之mod_deflate模块的使用

mod_deflate模块

如何为 PHP 文件启用 mod_deflate?

在没有 mod_deflate 的 Symfony 2 中使用 gzip / 压缩