我有大量数据要发送到浏览器,可能是100mb左右。我把它们分成了较小的文件,所以我可以模拟流媒体。假设我有200个文件,每个500kb。我在javascript中构建了200个文件的数组,然后循环遍历并为每个文件调用ajax。它工作正常。然后我想改进它,所以我在服务器上gziped一切,他们下降到原始块大小的约20%。我的ajax调用以下文件:
fileserver.php?file=/temp/media_C46_20110719_113332_ori-0.js.gz
在fileserver.php中,我非常简单:
$filepath = isset($_GET['file']) ? $_GET['file'] : '';
if($filepath!=''){
if(substr($filepath,-2,2)=='gz'){
header("Content-Type: text/plain" );
header("Content-Length: " .(string)(filesize($filepath)) );
header("Content-Encoding: gzip");
readfile(filepath);
}
else{
header("Location: ".$filepath );
}
}
同样,这完全有效。问题是它需要永远!在Chrome中查看我的网络选项卡,需要15秒左右才能获得100kb的块。我可以在不到一秒的时间内直接下载该文件。上面的php脚本几乎没有时间运行。我知道客户端(浏览器)需要花一点时间来夸大内容,但它必须不到一秒钟。那么花了15秒钟!有没有其他工具可以用来检查出来?
我知道我可以在apache中设置标头变量,但是我没有访问权限,而在php中执行它在功能上是等价的,对吧?这些是正确的标题设置吗?
答案 0 :(得分:0)
我刚才发现了问题。 filesize()函数没有获得正确的路径,因此它打印为空白。我修复了它以发送正确的信息,现在它的工作速度要快得多。