Как сжать JSON с PHP?
Я пишу небольшую страницу анализа, которая поможет мне выслеживать ошибки в приложении. По сути, это позволяет визуально сравнивать фактические данные и записи в журнале, а также выполнять анализ данных.
Поскольку это только для отладки, и поскольку я буду развертывать это на реальном сайте, я хочу, чтобы он имел как можно меньше нагрузки на сервер. Некоторые параметры анализа будут включать в себя довольно тяжелый поиск подстроки или n 2 поэтому я собираюсь разгрузить это для клиента.
Это означает, что страница PHP будет просто извлекать данные из таблиц и журналов, некоторые из них JSON и записывать их. Затем клиент Javascript выполнит весь анализ и т.д.
Проблема заключается в том, что данные JSON будут иметь несколько MB больших, а мое соединение с сервером - медленное. Было бы неплохо сжать данные. У кого-нибудь есть идеи?
Среда - это PHP + Apache; Я не знаю, будет ли установлен mod_gzip; и я не контролирую его.
Ответы
Ответ 1
Вы можете сжать данные с помощью управления выводами PHP. Просто поставьте этот вызов в начале вашего script перед любым выходом:
ob_start('ob_gzhandler');
Теперь любой выход будет сжиматься с помощью gzip или deflate, если он будет принят клиентом.
Ответ 2
В PHP 5.4 теперь находится JSON_UNESCAPED_UNICODE, поэтому вы можете заменить char:
\ u00f3 → Ĺ >= Ś
э:
json_encode($data,JSON_UNESCAPED_UNICODE);
Ответ 3
Если apache - ваш выбор (и это, как указано в исходном вопросе), вы можете добавить некоторые правила в .htaccess:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
# Add any mime-type you think is appropriate here
AddOutputFilterByType DEFLATE application/json
</IfModule>