[英]How to get a deflate data from PHP to Javascript
我有一个用IIS压缩的非常大的json(〜30mb)(由于它,大小约为〜6mb)。 出于未知的原因,gzip大部分时间都可以工作,但有时不起作用,我必须刷新页面几次才能在gzip中获取文件。
在中国的用户似乎永远都不会拥有gzip格式的文件,并且在代理和其他内容之后也看不到文件,因此加载时间太长了。 (他给我发送了一个打印屏幕,显示在4分钟内下载了12mb)。
该文件是使用php生成的,并使用javascript在客户端显示。 当时,我的第一个(也是唯一的)解决方案是我自己将查询返回的数据gzip压缩后再放入文件中。
我搜索发现PHP上有gzcompress
, gzencode
和gzdeflate
,并且大多数gzcompress应该返回zlib
格式,因此我可以在javascript上使用zlib
库。
PHP端:
file_put_contents('data/data2.json', gzcompress($res, 9));
我每20分钟刷新一次相同的文件,所以需要file_put_contents。
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响应
之后,我将提出一个简单的请求,并检查我的网络以查看响应是否正确压缩。
一旦一切正常,您可以删除手动php压缩
file_put_contents('data/data2.json', gzcompress($res, 9));
并解压缩javascript,因为浏览器将为您解压缩,而无需任何额外的逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.