如何将数据从PHP压缩到Javascript


How to get a deflate data from PHP to Javascript

我有一个非常大的json(约30mb),它与IIS进行了gzip映射(因此大小约为6mb)。由于未知的原因,gzip在大多数情况下都能工作,但有时不行,在获得gzip中的文件之前,我必须刷新页面好几次。

中国的用户似乎从来没有gzip格式的文件,在代理和其他东西后面,加载时间太长了。(他给我发了一个打印屏幕,显示4分钟内下载了12mb)。

该文件是用php生成的,并用javascript显示在客户端。我当时的第一个(也是唯一的)解决方案是在将查询返回的数据放入文件之前,自己对其进行gzip。

我搜索发现PHP上有gzcompressgzencodegzdeflate,最重要的是gzcompression应该返回zlib格式,这样我就可以在javascript上使用zlib库。

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 {}

我的猜测是gzcompresszlib之间的编码不一样(谢谢队长),所以zlib无法转换,但我无法修复

TL;DR为什么gzip每次都不起作用?如何在PHP上压缩json并在Javascript上解压缩它?

我首先要检查您的IIS服务器是否正确配置为gzip http响应

之后,我会提出一个简单的请求,并检查我的网络,看看响应是否正确地进行了gzip映射。

一旦所有这些都正常工作,就可以删除手动php压缩

file_put_contents('data/data2.json',  gzcompress($res, 9));

和javascript解压缩,因为浏览器会为您解压缩,没有任何额外的逻辑。