【问题标题】:gzip json files sent to the browsergzip json 文件发送到浏览器
【发布时间】:2012-06-07 23:55:59
【问题描述】:

我有大量数据要发送到浏览器,大概 100mb 左右。我已将它们分成较小的文件,以便模拟流式传输。假设我有 200 个文件,每个文件 500kb。我在 javascript 中构建了一个包含 200 个文件的数组,然后对其进行循环并为每个文件进行 ajax 调用。它工作正常。然后我想改进它,所以我对服务器上的所有内容进行了 gzip 压缩,它们下降到原始块大小的 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 中进行设置在功能上是等效的,对吧?这些是要设置的正确标题吗?

【问题讨论】:

  • 为什么首先要绕道 PHP 脚本?直接在 Web 服务器中启用 .js 文件的压缩不是更有意义吗?
  • 我在上一段中提到过,我无权编辑 Web 服务器。它在功能上是等效的,对吧?
  • 您也可以尝试将 Content-type 更改为 application/x-gzip
  • 这并不等同:必须启动一个占用内存的 PHP 进程来提供文件。 (但这不应该导致 15 秒的延迟。)不过,在 Apache 的配置中或(如果可能的话)在 .htaccess 文件中执行此操作会好得多

标签: php jquery json gzip


【解决方案1】:

我刚刚发现了问题。 filesize() 函数没有得到正确的路径,所以它打印为空白。我修复了它以发送正确的信息,现在它的工作速度要快得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2016-04-21
    相关资源
    最近更新 更多