Простое сжатие CSS файлов

Рецепт №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;
}
Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*