用Apache和PHP块gzip的任何方法

时间:2010-05-19 18:11:41

标签: php .htaccess gzip deflate chunked

我在网站上有一个Web应用程序需要一段时间(约10秒)才能完成靠近底部的部分页面 - 它已经尽可能优化,并且缓存不是一种选择。

我们已经通过.htaccess指令SetOutputFilter DEFLATE在服务器上启用了压缩,问题是导致整个页面在开始输出给用户之前一直保持到完全,这不是最佳的,因为用户什么都看不见直到页面完成。

我也通过php ob_start("ob_gzhandler");方法尝试过它。

目前我的.htaccess中有<FilesMatch >限制此特定脚本被压缩。

基本上我的问题是这样的 - 有没有办法说chunk gzip或deflate让用户把它分成几部分,这样他们就可以看到页面已经开始加载了?

3 个答案:

答案 0 :(得分:1)

我会说:不。我认为现在有HTTP提供的方式。

答案 1 :(得分:1)

如果您使用ob_start("ob_gzhandler")方法,则可以执行此操作 - 您需要查看flushob_flush函数。

一些示例代码 - 尝试使用curl加载,或使用fiddler检查实际的http响应

<?php
ob_start('ob_gzhandler');
print "chunk 1";
ob_flush();
flush();
sleep(2);
print "chunk 2";
ob_end_flush();

不幸的是,浏览器似乎没有以块的形式显示它 - 我认为这是因为每个块的数据太小。您可以通过在测试文件上调用wget -O - -q http://chunktest/chunktest.php来验证此效果。

还有一些更有用的资源here

答案 2 :(得分:0)

如果页面的加载时间很长,那么处理它的创造性方法就是使用一个非常快速的加载页面,并在页面上对该长载内容进行ajax调用。我们对提取详细成员使用情况统计信息的网页执行此操作...其他网站(例如Adsense)会在其报告页面上执行此操作。