javascript - 以 gzip 格式发送数据导致 ajax 进度停止了一段时间

标签 javascript php jquery ajax gzip

我正在通过 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 阶段吗,我不明白这种行为的原因。

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

最佳答案

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

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

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

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

enter image description here

(image source)

关于javascript - 以 gzip 格式发送数据导致 ajax 进度停止了一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50151837/

相关文章:

php - Jquery 脚本未显示在 firebug 或触发中

javascript - 合并两个 PHP - Kimonlabs

javascript - Jquery:将 SVG 转换为新尺寸的 PNG

javascript - 限制文本区域添加超过其高度的文本

javascript - 可以在拖动开始后异步设置 event.dataTransfer 吗?

jquery - 将元素样式设置为 :hover style using jQuery

javascript - 如何使用 jQuery 分离元素选择器?

javascript - jQuery Each Loop - 显示单个项目

php - 使用PHP阻止用户下载代码,但代码是cpu密集型的

javascript - Jquery 从 onmouseleave 字段中获取值