如果您配置Apache以为您的静态HTML / CSS / JS /等启用gzip压缩。文件,它会自动将gzip压缩版本输出到任何发送适当Accept-Encoding
请求标头的客户端。 (对于其他客户端,它只发送原始未压缩文件。)
我的问题是:每次gzip接受客户端请求时,Apache都会重新压缩原始文件吗?或者它是否缓存gzip压缩副本,只有在注意到文件的最后修改时间发生变化时才重新压缩它?
如果它确实缓存了文件的gzip压缩文件,那么这个缓存存储在哪里?
答案 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不保留任何缓存文件。它只保留你告诉它的文件。以下是压缩的工作原理:
浏览器再次请求相同的文件或页面时。它向服务器发送一个请求,声明它接受压缩,以及当前文件和Modified Date。从这里,服务器将响应它们是相同的并且不发送其他信息,或者仅根据修改日期发送更改的文件。