繁体   English   中英

如何从PHP到Javascript获取压缩数据

[英]How to get a deflate data from PHP to Javascript

我有一个用IIS压缩的非常大的json(〜30mb)(由于它,大小约为〜6mb)。 出于未知的原因,gzip大部分时间都可以工作,但有时不起作用,我必须刷新页面几次才能在gzip中获取文件。

在中国的用户似乎永远都不会拥有gzip格式的文件,并且在代理和其他内容之后也看不到文件,因此加载时间太长了。 (他给我发送了一个打印屏幕,显示在4分钟内下载了12mb)。

该文件是使用php生成的,并使用javascript在客户端显示。 当时,我的第一个(也是唯一的)解决方案是我自己将查询返回的数据gzip压缩后再放入文件中。

我搜索发现PHP上有gzcompressgzencodegzdeflate ,并且大多数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 {}

我的猜测是gzcompresszlib之间的编码不一样(感谢队长),因此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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM