Сжатие динамического HTML, сгенерированного PHP
Я использую PHP для создания динамических сайтов. Я сталкивался с различными методами оптимизации, чтобы оптимизировать свои веб-страницы. Одним из них является сжатие HTML. Так как на моей веб-странице много JS, CSS и встроенных скриптов. Общий размер сгенерированного источника (HTML) составляет около 150 КБ.
Но если я сохраню сгенерированный источник страницы и сожму его с помощью некоторых сайтов, таких как http://htmlcompressor.com/compressor.html, выходной файл будет размером около 90 КБ (где удаляются пустые разрывы строк и пространство). Так есть ли способ сделать это динамически, когда страница генерируется? Для этого есть помощники или библиотека? Любая помощь по этой теме будет принята с благодарностью.
3 ответа
Одна из лучших вещей, которую вы можете сделать, это удалить любые встроенные сценарии, которые не должны быть встроенными.
У меня есть это в верхней части моего файла PHP:
ob_start();
ob_implicit_flush(0);
Затем я включаю эту функцию: (Мои заметки не говорят, откуда я их украл)
function print_gzipped_page() {
$HTTP_ACCEPT_ENCODING = $_SERVER["HTTP_ACCEPT_ENCODING"];
if( headers_sent() )
$encoding = false;
else if( strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false )
$encoding = 'x-gzip';
// *** I can't recall why I disabled this one ***
// I had some device that it didn't work with.
//else if( strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false )
// $encoding = 'gzip';
else {
$encoding = false;
}
$contents = ob_get_clean();
if ($encoding)
{
$_temp1 = strlen($contents);
if ($_temp1 < 2048) { // no need to waste resources in compressing very little data
print($contents);
} else {
header('Content-Encoding: '.$encoding);
print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, $_temp1);
print($contents);
}
}
else {
print($contents);
}
}
В самом низу страницы я просто звоню:
print_gzipped_page();
Как сказано в коде, если вы уже отправили заголовки - если вы уже отправили ЛЮБОЙ вывод, в основном, то этот код ничего не сжимает для вас.
На сайте, который вы упомянули, уже есть решение для вас. Подумайте об этом, вместо того, чтобы сжимать вывод HTML ваших PHP-файлов, пусть они генерируют уже сжатый HTML. Таким образом, вы не тратите лишние ресурсы на сжатие вывода, потому что вы уже это сделали.
Я использую HTMLCompressor для сжатия PHP-файлов тем WordPress, и это работает как шарм. Просто выберите x/html + PHP из списка типов кода.
Обратите внимание, что он не сжимает код HTML, содержащийся в строках PHP, поэтому, если ваши файлы PHP генерируют код следующим образом:
<?php
echo '<div>';
echo ' <b> Some number is ' . $num . ' </b>';
echo '</div>';
?>
измените это на:
<div>
<b> Some number is <?php echo $num; ?> </b>
</div>
и он будет правильно сжат;)
Я натолкнулся на скрипт под названием Dynamic Website Compressor, который может сжимать ваш "HTML - Inline CSS - Inline JS" на FLY (означает каждую страницу вашего сайта).
Он не изменяет ничего в ваших реальных файлах сервера или другими словами, он не изменяет ваши файлы, и никаких изменений не требуется. Я надеюсь, что это может помочь вам