Рецепт №77. Из книги «128 рецептов php»
Перейти к оглавлению
Для больших проектов, которые имеют много css файлов большого размера, сжатие файлов стилей может немного ускорить загрузку страниц. Почти в каждом css файле можно найти куски закомментированного кода, повторы пробелов, табуляцию — все это можно удалить из файлов, а так же можно избавиться от переходов на новую строку. Помимо удаления лишних символов, будет полезно собрать все файлы в один файл, это тоже ускоряет загрузку. Все эти действия наглядно продемонстрирует ниже приведенный рецепт.
Пример:
// массив с путями до css файлов $css_array = array( 'css/style_1.css', 'css/style_2.css' ); // путь, куда будет сохранен сжатый файл $new_file = "css/compression_file.css"; // вызываем функцию сжатия $result = compression_files($css_array, $new_file); var_dump($result); // вывод результата /** * Функция для сжатия CSS файлов * Удаляет комментарии, табуляцию, * переходы на новую строку и повторяющиеся пробелы * А также собирает все файлы в один * * @var $files_css array - массив путей * до css файлов, которые необходимо сжать * * @var $new_file string - путь, куда будет * сохранен сжатый файл * * @return bool - результат */ function compression_files($files_css, $new_file) { // получаем содержимое всех css файлов $content_css = ""; foreach($files_css as $one_file){ $content_css .= @file_get_contents($one_file); // если какой-то из файлов // не получилось прочитать if(!$content_css) return false; } // удаляем комментарии $content_css = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $content_css ); // удаляем табуляции и переходы на новую строку $content_css = str_replace( array("\r\n", "\r", "\n", "\t"), ' ', $content_css ); // удаляем повторяющиеся пробелы $content_css = preg_replace( '/ {2,}/', ' ', $content_css ); // сохраняем результат в файл $css_file = fopen ($new_file, "w+"); fwrite($css_file, $content_css); $result_save = fclose($css_file); // вернем результат сохранения return $result_save; }