Оптимизация, сжатие и кэширование HTML, CSS, JS в PHP
Чтобы сайт быстрее грузился его нужно оптимизировать! И первое над чем стоит задуматься - это оптимизация HTML/XML/JS/CSS кода на PHP.
Чтобы сайт быстрее грузился его нужно оптимизировать! И первое над чем стоит задуматься - это оптимизация HTML/XML/JS/CSS кода на PHP:
- Удаление из кода комментариев
- Удаление лишних пробелов и переносов строк
- Замена тегов, событий и цветов на более короткие
- Код вытягивается в одну строку - грузится и обрабатывается в несколько раз быстрее
Что это и как это выглядит можно понять на следующем слайде:
Несколько способов оптимизации:Optimize-2.3.4 - Оптимизация сгенерированного PHP скриптом HTML/XML/JS/CSS кода перед выводом в браузер, оптимизация "на лету" от автора Rin
Возможности оптимизатора HTML/XML кода:
- удаляет пробелы вначале и в конце переносов строк
- удаляет пробелы ПОСЛЕ открывающих тагов, если перед тагом есть пробел
- удаляет пробелы ПЕРЕД закрывающими тагами, если после тага есть пробел
- удаляет многострочные или большие html комментарии, комментарии в javascript и стилях.
- корректно обрабатывает таги
, <textarea>, <code>, <nooptimize></li><li>специальный таг <nooptimize> на выходе вырезается.</li></ul><p><em>.</em><em>Особенности оптимизатора HTML/XML кода</em></p><p>Ценность этого оптимизатора в том, что он аккуратен к html коду с формами ввода, "с умом" вырезает комментарии вида <!--...--> и // в <script>...</script>.</p><p>Верстальщики могут временно/навсегда комментировать большие участки html кода, писать пояснительные комментарии для себя, не опасаясь за размер выходного файла.</p><p>С параметрами по умолчанию Optimize::html() даёт приемлемое сжатие за небольшое время работы, (баланс между степенью сжатия и скоростью работы) для использования оптимизации "на лету".</p><p><em>Пример использования:</em></p><pre>// подключаем include("optimize.php"); //прочие параметры PHP <span class="redactor-invisible-space">ob_start(array('Optimize', 'html')); <span class="redactor-invisible-space">// код РНР для генерации HTML страницы ob_end_flush();<span class="redactor-invisible-space"></span></span></span>
Никогда не экономьте на отступах и пробелах в написании кода и ваш КПД увеличится! :) С параметрами по умолчанию программа даёт приемлемое сжатие за небольшое время работы, (баланс между степенью сжатия и скоростью работы) для использования оптимизации "на лету". Скачать Optimize-2.3.4.7z
Сжатие HTML<?php header('Expires: '.gmdate('D, d M Y H:i:s GMT', time() + 3600)); header('Content-type: text/html; charset=UTF-8'); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header('X-UA-Compatible: IE=Edge,chrome=1'); function ob_html_compress($buf){ return preg_replace(array('/<!--(?>(?![).)(.*)(?>(?!]).)-->/Uis','/[[:blank:]]+/'),array('',' '),str_replace(array("n","r","t"),'',$buf)); } ob_start('ob_html_compress'); ?> <!-- Your HTML code here --> <?php ob_end_flush() ?>
Сжатие JSСоздайте файл js.php со следующим кодом:<?php function compress($buffer) { $buffer = preg_replace("/((?:/*(?:[^*]|(?:*+[^*/]))**+/)|(?://.*))/", "", $buffer); $buffer = str_replace(array("rn","n","r",' ',' '), '', $buffer); return $buffer; } $modified = 0; $offset = 60 * 60 * 24 * 7; header ('Content-type: text/javascript; charset=UTF-8'); header ('vary: accept-encoding'); header ('Cache-Control: max-age=' . $offset); header ('Pragma:'); header ("Last-Modified: ".gmdate("D, d M Y H:i:s", $modified )." GMT"); if(extension_loaded('zlib')){ob_start('ob_gzhandler');} ob_start("compress"); include('init.js'); ob_end_flush(); if(extension_loaded('zlib')){ob_end_flush();} ?>
В HTML код страницы добавьте<script src="/js/js.php"></script>
В init.js файл напишите ваш JavaScript-код и сохранить его в директории, где сохранен js.php
Оптимизация и кэширование CSSсоздайте файл css.php со следующим кодом:<?php $styles = array( //your CSS files "style1.css", "style2.css", "style3.css", ); $mincss = ""; foreach ($styles as $css) { $mincss .= file_get_contents($css); } $mincss = preg_replace('!/*[^*]**+([^/][^*]**+)*/!', '', $mincss); $mincss = str_replace(': ', ':', $mincss); $mincss = str_replace(array("rn",' ',' '), '', $mincss); $mincss = str_replace(';}','}', $mincss); $modified = 0; $offset = 60 * 60 * 24 * 7; if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $modified) { header("HTTP/1.0 304 Not Modified"); header ('Cache-Control:'); } else { header ('Cache-Control: max-age=' . $offset); header ('Content-type: text/css; charset=UTF-8'); header ('Pragma:'); header ("Last-Modified: ".gmdate("D, d M Y H:i:s", $modified )." GMT"); if(extension_loaded('zlib')){ob_start('ob_gzhandler');} ob_start("compress"); echo $mincss; ob_end_flush(); if(extension_loaded('zlib')){ob_end_flush();} } ?>
В HTML включите вывод<link rel="stylesheet" href="/css/css.php" />