Сжатие CSS файлов

Введение

Сжатие CSS файлов с помощью phpВ этой статье я хочу показать как можно с помощью php реализовать сжатие CSS файлов. Для больших проектов, которые имеют много css файлов большого размера, сжатие может заметно ускорить загрузку страниц. Почти в каждом файле стилей можно найти куски закомментированного кода, повторы пробелов, табуляцию — все это можно удалить из файлов, а так же можно избавиться от переходов на новую строку. Помимо удаления лишних символов, будет полезно собрать все файлы в один файл, это тоже ускоряет загрузку страницы.

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

Сжатие CSS файлов средствами php. Код

А теперь приведу непосредственно сам код сжатия. Код написан на php и оформлен в виде функции.

/**
*	Функция для сжатия 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;
}

И пример использования этой функции:

// массив с путями до 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);
Рассказать друзьям:


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

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

*