2015-12-22 2 views
1

Я использую этот способ для отправки файла json с моего сервера.json gzip compression with php

$data = file_get_contents('cache/file.json'); 

ob_start('ob_gzhandler'); 

// Output as normal 
echo ($data); 

кэш/file.json не GZIP сжатый (простой JSON, без пробелов весь файл один длинный ряд).

Я думаю, вместо gzipping файла каждый раз, когда он запрашивается. Должен ли я сохранить его как сжатые файлы

$gzjson = gzencode($data, 9); 
file_put_contents('gzcache/file.json', $gzjson); 

Так что минимизирует нагрузку на сервере? Идея состоит в том, чтобы gzip это и каждый раз, когда файл запрашивается просто обслуживать уже gzip-файл, а не gzip его каждый раз, когда он запрашивается.

Кто-нибудь думает, что это хорошая идея?

+1

Ответ зависит от того, насколько большой файл и как часто вы его запрашиваете. – Marged

+0

Максимальный размер файла (без сжатия) будет 200 КБ. Не лучше ли сжимать его один раз и обслуживать сжатый файл каждый раз? – inrob

+0

Предлагаю вам отредактировать свой вопрос. @Marged абсолютно правильно, и его соображения являются ключевыми элементами вашего вопроса. –

ответ

1

Как ваши php-пески некоторые загрузки процессора для генерации zip, так что это означает - Да это хорошая идея, чтобы он был кеширован и просто прочитал его, если у вас достаточно места на сервере.

Кроме того, вы можете реализовать старые кэшированные файлы, чтобы удалить логику. Проверьте, если время создания файла (с http://php.net/manual/en/function.filemtime.php)

$creationTime = filemtime($zip); 

if(time() - $creationTime >= 60 * 60 * 24 * 2) // 2 days 
    @unlink($zip); 
} 
// create new zip 

и если он старше некоторый диапазон (2 дня) удалить его и восстановить его снова, так что это означает, что вы будете восстанавливать этот файл один раз в диапазон

+0

Время кеша не является проблемой. Потому что я принесу его из API , и как только я загружу json из api, я его буду gzip и немедленно его сохраню. – inrob

0

I позволит httpd обслуживать json как статический ресурс. Сервер должен позаботиться о согласовании содержимого и вернуть архивный файл, если клиент может его распаковать.