javascript - 如何从 PHP 获取 deflate 数据到 Javascript

标签 javascript php json gzip inflate

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

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

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

我搜索了一下,发现有gzcompress , gzencodegzdeflate在 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/

相关文章:

javascript - jQuery 单击事件不适用于动态添加的元素

javascript - Observable.of 来观看内容?

php - 将运行时创建的文本框值保存在数据库表中

python - 将python dict转换为字符串并返回

javascript - 从未调用过的 Jquery Ajax 成功函数

javascript - 运行多个 requestAnimation 循环来发射多个球?

PHP mysqli::自动提交 VS "START TRANSACTION"

php - 使用外键从第二个表获取值

javascript - 将逗号分隔的字符串下载为 csv

php - 使用 json 在数据库上插入多个复选框