Сжатие динамического 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 (означает каждую страницу вашего сайта).

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

Другие вопросы по тегам