我们已将 Apache 设置为在将 html 页面发送到客户端浏览器之前对其进行 gzip 压缩。
然而,我们的一些页面生成速度较慢,似乎Apache 会等待,直到获得完整的页面,然后对其进行压缩,并将其发送到浏览器。
页面上的大部分内容(主要的重要部分)实际上都生成并输出得相当快。
是否可以配置 Apache,使其在脚本开始输出某些内容时立即开始压缩并发送页面数据?是的,您能提供任何有关如何执行此操作的帮助吗?
如果没有,您能建议其他方法让服务器使用 gzip 压缩吗?
生成页面的脚本写成PHP我们正在使用Apache 2.0在 Linux 上。
答案1
我们在使用 perl 后端时遇到了同样的问题。我正在查找文档,它们为我指明了解决方案。这最终与 gzip 尝试压缩整个文档以计算内容长度有关。
我们有一些长时间运行的脚本,这破坏了用户体验——他们没有逐步获得输出,而是等待 2-3 分钟而没有任何活动!
更新:
恐怕我找不到它。查看我们的活动日志,似乎我只是在我们的网络服务器上禁用了它,然后出于这个和其他原因移动了一个基于 nginx 的前端(它将使用分块编码进行 gzip,而无需发送内容长度)
尝试升级到 Apache 2.2,据我所知,新版本的 Apache 对 chunked/gzip 的处理要好得多。
答案2
这被称为“早期刷新”,主要是在生成整个页面之前运行“flush();”。通常,优化的 PHP 服务器会缓冲整个页面,但故意调用 flush() 会覆盖这一点。Yahoo 上的提示页面有更多信息:http://developer.yahoo.com/performance/rules.html#flush
答案3
不时地或在块之后发送 flush(),除非您使用 obstart(),否则 apache 将发送分块响应。