【问题标题】:Does Apache cache the gzipped version of a static file?Apache 是否缓存静态文件的压缩版本?
【发布时间】:2011-06-17 13:36:47
【问题描述】:

如果您将 Apache 配置为为静态 HTML/CSS/JS/等启用 gzip 压缩。文件,它会自动向任何发送适当的Accept-Encoding 请求标头的客户端输出压缩版本。 (而对于其他客户端,它只发送原始的未压缩文件。)

我的问题是:每次接受 gzip 的客户端请求时,Apache 都会重新压缩原始文件吗?还是它会缓存 gzip 后的副本,并且仅在注意到文件的最后修改时间已更改时才重新压缩它?

如果它确实缓存了您文件的 gzip 压缩副本,该缓存存储在哪里?

【问题讨论】:

标签: performance apache compression gzip


【解决方案1】:

不,它不会缓存 gzip 压缩文件。

但是,压缩文件的成本低于通过网络喷射额外数据包的成本,因此即使没有缓存,您也会看到服务器上的总体 CPU 使用率(以及内存使用率和上下文切换次数)较低 -以及更快的客户响应。

请注意,压缩文件存储在临时文件夹中 - mod_deflate 将输入读取到内存中固定大小的缓冲区中 - 当缓冲区已满(或流结束)时,内容被压缩并返回给网络服务器。

如果内容被预先压缩或缓存在服务器端,它将使用更少的 CPU(尽管速度不会显着提高) - 有多种方法可以做到这一点 - mod_rewrite 可以测试 filename.gz 的存在并提供它代替文件名,或者您可以使用反向代理(假设内容也提供缓存指令)。

【讨论】:

  • mod_deflate 在服务器上的 CPU 使用率和带宽节省之间有一个折衷 - 这篇文章很旧,但很清楚地展示了它:webperformance.com/library/reports/moddeflate
  • 不,这不是权衡 - 正如我试图在回答中明确指出的那样,与处理附加数据的传输相比,压缩数据所需的 CPU 周期和上下文切换更少。虽然阅读您链接的文章很有趣,但它的方法和分析有些有限。
  • 您是如何得出没有权衡取舍的结论的?这个答案只是说它是真实的,没有任何背景信息。您可能是对的,但我想它会根据特定的硬件配置等而有所不同。我很想看到任何指向性能测试结果的链接。
【解决方案2】:

不,它没有。现在是described in the mod_deflate documentation

由于 mod_deflate 会在每次发出请求时重新压缩内容,因此可以通过预压缩内容并告诉 mod_deflate 在不重新压缩内容的情况下提供服务来获得一些性能优势。

【讨论】:

    【解决方案3】:

    Apache 不保留任何缓存文件。它只保留您告诉它保留的文件。以下是压缩的工作原理:

    1. 浏览器请求页面并声明它接受压缩
    2. 服务器找到页面并读取请求的头部。
    3. 服务器将页面发送到浏览器(如果在标头请求中声明它接受则压缩 - 压缩文件存储在 memory/temp 文件夹中)
    4. 浏览器接收信息并显示(如果压缩,则在解压缩后)。然后浏览器缓存页面和图像。
    5. 服务器从内存/临时文件夹中删除压缩文件的任何提示,以便为下一个请求释放空间。它确实会在 access_log 中记录事务。

    再次请求相同文件或页面时的浏览器。它向服务器发送一个请求,说明它接受压缩,以及当前文件和修改日期。从这里服务器将响应它们是相同的并且不发送任何附加信息,或者仅发送基于修改日期的更改文件。

    【讨论】:

    • 您有关于在请求后立即删除 gzip 压缩版本的信息的任何参考吗?它会不断重复压缩相同的静态文件,每次完整请求一次,这似乎有点疯狂。我知道If-Modified-Since requests 会减少这种情况需要发生的次数,但每个客户端仍然至少会发生一次,如果它只是提供静态文件,这是不必要的。
    • 压缩版本存储在缓存/内存中。曾经有一种方法可以在 Apache 1.3 中使用 mod_gzip、预压缩文件和多视图,但从那以后就没有再查过。我运行多个专用服务器,但没有看到任何实际存储在服务器上的压缩版本。 httpd.apache.org/docs/2.2/mod/mod_deflate.html 显示如何更改内存限制
    • mod_deflate 现在是标准并且更加用户友好。加上预压缩文件,您必须在更新后或定期重新压缩文件以使其保持最新状态。
    • mod_deflate 和 mod_gzip 都不使用文件。
    猜你喜欢
    • 2018-02-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多