我有一个非常大的 json (~30mb),它是用 IIS 压缩的(因此大小约为~6mb)。由于未知的原因,gzip 大部分时间都可以工作,但有时却不能,我必须刷新页面几次才能获取 gzip 中的文件。
中国的用户似乎从来没有 gzip 格式的文件,并且在代理和其他东西后面,加载时间太长了。 (他给我发了一个打印屏幕,显示 4 分钟内下载了 12mb)。
该文件是用php生成的,并用javascript显示在客户端。 当时我的第一个(也是唯一的)解决方案是自己对查询返回的数据进行 gzip,然后再将其放入文件中。
我搜索了一下,发现有gzcompress
, gzencode
和gzdeflate
在 PHP 上,最重要的是 gzcompress 应该返回 zlib
格式,这样我就可以使用 zlib
JavaScript 库。
PHP 端:
file_put_contents('data/data2.json', gzcompress($res, 9));
需要 file_put_contents,因为我每 20 分钟刷新一次同一个文件。
Javascript 方面:
$.ajax({
type: 'GET',
url: "data/data2.json",
headers: { "Content-Encoding" : "gzip", "Content-type": "text/plain" },
dataType: "text",
async: false,
success: function(data) {
let inflate = new zlib.inflate(data);
});
不幸的是,这不起作用。
如果我写let inflate = new zlib.inflate(data).toString('utf8');
就像它返回的示例一样 "[Object object]"
如果我删除了 toString 部分,它会返回 e…s.inflate {}
。
我的猜测是 gzcompress
之间的编码和zlib
不一样(感谢队长)所以 zlib 无法转换,但我无法修复它
TL;DR 为什么 gzip 不是每次都能工作?如何在 PHP 上压缩 json 并在 Javascript 上解压缩?
最佳答案
我首先检查您的 IIS 服务器是否已正确配置为 gzip http responses
之后,我会发出一个简单的请求并检查我的网络以查看响应是否已正确压缩。
一旦所有这些工作正常,您就可以删除手动 php 压缩
file_put_contents('data/data2.json', gzcompress($res, 9));
并且 JavaScript 会解压缩,因为浏览器会为您解压缩,无需任何额外的逻辑。
关于javascript - 如何从 PHP 获取 deflate 数据到 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167193/