我正在通过 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 压缩相同的方式来解释,因为你有更多的事情发生:
- 在服务器端缓冲数据以进行压缩
- 缓冲完成后进行实际压缩
- 将更小的压缩数据发送给客户端
- 客户端现在正在缓冲压缩数据,需要等到它获得所有数据才能解压缩
- 最终客户端可以解压缩数据,这比压缩时间快得多
您可能需要在“网络监控”选项卡中启用“使用大请求行”以查看更详细的计时。也许这也会有所帮助。
关于javascript - 以 gzip 格式发送数据导致 ajax 进度停止了一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50151837/