首页 > 解决方案 > 以gzip格式发送数据导致ajax进度停止一段时间

问题描述

我正在通过 jquery 进行 ajax 调用,而在服务器端我使用的是 PHP。目的是从服务器端带来大的 JSON 数据。由于 JSON 的大小很大,这就是我在发送数据时使用 gzip 压缩的原因。

在服务器端;

ob_start('ob_gzhandler');
header('Content-Encoding: gzip');

现在我看到正在传输的数据大小显着减少。但是我看到 ajax 调用进度卡在两者之间一段时间(我正在通过 chrome 网络监控区域进行检查)。

观察结果如下;

1 . 呼叫状态显示待处理约 23 秒(这是完美的,因为它与生成 JSON 的时间完全相同)

2 . 数据传输从第 24 秒开始,并在接下来的 5 到 6 秒内继续传输 94.4 kB 数据

3 . 之后它几乎卡住了20秒,当时间甚至没有增加时,我的意思是它显示相同的时间停留在第2点。

4 . 然后突然它显示 ajax 调用已完成,我得到完整的数据,时间直接显示到 56 秒左右。并且数据大小保持不变,为 94.4 kb,这意味着在阶段 3 和阶段 4 中没有传输额外的数据

所以你能解释一下第3阶段和第4阶段吗,我不明白这种行为的原因。

种类的帮助将非常有帮助。如果您需要更多信息,请告诉我。

标签: javascriptphpjqueryajaxgzip

解决方案


对我来说,这种行为似乎与 gzip 压缩的工作方式有关。

您看到的时间不能以与没有 gzip 压缩相同的方式解释,因为您有更多的事情发生:

  • 在服务器端缓冲数据以进行压缩
  • 缓冲完成后进行实际压缩
  • 将更小的压缩数据发送到客户端
  • 客户端现在正在缓冲压缩数据,需要等到它得到所有数据才能解压
  • 最后客户端可以解压缩比压缩时间快得多的数据

您可能需要在“网络监控”选项卡中启用“使用大型请求行”以查看更详细的时间安排。也许这也会有所帮助。

在此处输入图像描述

(图片来源)


推荐阅读