Сжатие кэшированного вывода с использованием выходных буферов PHP
Используя этот однострочный код ob_start('ob_gzhandler');
в верхней части страницы вывод PHP составлял около 11 кбайт в соответствии с консолью Chrome. Когда я попытался кэшировать вывод с помощью следующего кода, я обнаружил, что кэшированный файл был сохранен около 65 КБ. Является ли больший размер вывода компромиссом для кэширования? Есть ли способ сжать кешированный вывод дальше? Я попытался добавить некоторые правила htaccess для сжатия html, но я не думаю, что это помогает.
$id = $_GET["id"];
$cachefile ="cache/p_{$id}.html";
if (file_exists($cachefile)) {
include($cachefile);
echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
exit;
}
ob_start('ob_gzhandler');
$fp = fopen($cachefile, 'w'); // open the cache file for writing
fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
fclose($fp); // close the file
ob_end_flush();
1 ответ
Решение
Ваш кэшированный файл не был заархивирован сервером, попробуйте так:
ob_start('ob_gzhandler');
$id = $_GET["id"];
$cachefile ="cache/p_{$id}.html";
if (file_exists($cachefile)) {
include($cachefile);
echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->";
} else {
// your html or something else ...
$fp = fopen($cachefile, 'w'); // open the cache file for writing
fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
fclose($fp); // close the file
}
ob_end_flush();
PS Я бы оставил эту задачу сжатия на веб-сервере ( nginx, apache).