Apache是​​否缓存静态文件的gzip压缩版本?

时间:2011-06-17 13:36:47

标签: performance apache compression gzip

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

我的问题是:每次gzip接受客户端请求时,Apache都会重新压缩原始文件吗?或者它是否缓存gzip压缩副本,只有在注意到文件的最后修改时间发生变化时才重新压缩它?

如果它确实缓存了文件的gzip压缩文件,那么这个缓存存储在哪里?

3 个答案:

答案 0 :(得分:4)

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

然而,压缩文件的成本低于通过网络喷射额外数据包的成本,因此即使没有缓存,您的服务器上的总CPU使用率(以及更低的内存使用率和更少的上下文切换)也会降低 - 并在客户端做出更快的反应。

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

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

答案 1 :(得分:2)

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

  

由于每次发出请求时mod_deflate会重新压缩内容,因此可以通过预压缩内容并告知mod_deflate为其提供服务而不重新压缩它们来获得某些性能优势。

答案 2 :(得分:0)

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

  1. 浏览器请求页面并声明它接受压缩
  2. 服务器找到页面并读取请求的标头。
  3. 服务器向浏览器发送页面(压缩,如果声明它在标头请求中接受 - 压缩文件存储在内存/临时文件夹中)
  4. 浏览器接收信息并显示(压缩后解压缩)。然后浏览器缓存页面和图像。
  5. 服务器从memory / temp文件夹中删除任何压缩文件的提示,以释放下一个请求的空间。它确实登录了事务的access_log。
  6. 浏览器再次请求相同的文件或页面时。它向服务器发送一个请求,声明它接受压缩,以及当前文件和Modified Date。从这里,服务器将响应它们是相同的并且不发送其他信息,或者仅根据修改日期发送更改的文件。