javascript - 以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阶段吗,我不明白这种行为的原因。
种类的帮助将非常有帮助。如果您需要更多信息,请告诉我。
解决方案
对我来说,这种行为似乎与 gzip 压缩的工作方式有关。
您看到的时间不能以与没有 gzip 压缩相同的方式解释,因为您有更多的事情发生:
- 在服务器端缓冲数据以进行压缩
- 缓冲完成后进行实际压缩
- 将更小的压缩数据发送到客户端
- 客户端现在正在缓冲压缩数据,需要等到它得到所有数据才能解压
- 最后客户端可以解压缩比压缩时间快得多的数据
您可能需要在“网络监控”选项卡中启用“使用大型请求行”以查看更详细的时间安排。也许这也会有所帮助。
推荐阅读
- javascript - 如何重新排列 Artoo.js 生成的 JSON 对象?
- javascript - Bootstrap 4 Card Slider 和 Half Slider 具有相同的导航
- eclipse - Antlr4 语法、Eclipse 和 Maven。在我的代码上看不到生成的类
- java - 从 url 或页面解析源视频文件链接?
- java - Android-Text To Speech 无法在设备上运行
- python - 使用 pyinstaller 生成的可执行文件遇到“致命的 python 错误:initfsencoding”
- ios - Apple iTunes 应用程序链接在 UIWebView 而不是 App Store 中打开
- c# - FireSharp QueryBuilder 返回 null
- java - java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 FloatingActionButton.setImageResource(int)'
- python - 如何向新网址发出请求?