Как получить дефлятированные данные из PHP в Javascript

У меня есть очень большой JSON (~ 30 МБ), который поставляется с IIS (благодаря этому размер около 6 МБ). По неизвестной причине gzip работает большую часть времени, но иногда это не так, мне приходится несколько раз обновлять страницу, прежде чем получить файл в gzip.

У пользователя в Китае, кажется, никогда нет файла в формате gzip и за прокси-серверами и прочим, время загрузки слишком велико. (Он прислал мне распечатанный экран, показывающий 12 Мб, загруженных за 4 минуты)

Файл генерируется с помощью php и отображается на стороне клиента с помощью javascript.
Мое первое (и уникальное) решение в то время — это сжать в одиночку данные, возвращаемые моим запросом, перед тем, как поместить их в файл.

Я искал и нашел там 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 не работает каждый раз? Как сжать JSON на PHP и распаковать его на Javascript?

0

Решение

Я бы сначала проверил, что ваш сервер IIS правильно настроен на gzip http ответы

После этого я бы сделал простой запрос и проверил свою сеть, чтобы увидеть, правильно ли получен ответ.

После того, как все это работает хорошо, вы можете удалить ручное сжатие PHP

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

И Javascript распаковать, так как браузер разархивирует для вас, без какой-либо дополнительной логики.

2

Другие решения

Других решений пока нет …