Иногда на больших сайтах размер CSS файла вырастает до 20 килобайт и больше. Несмотря на то что он кэшируется, есть способ все же сжать сам файл. Этот пост практически перевод статьи
“The Definitive Post on Gzipping your CSS” написанной Mike Papageorge (
http://www.fiftyfoureleven.com/).
Здесь я опишу методы сжатия CSS файла на 70-80% с помощью PHP. Вообще говоря это можно сделать и без PHP, лишь используя модули апача: mod_gzip или mod_deflate. То как это можно сделать описано тут. Если же доступа к конфигурации у вас нет (как часто бывает на хостингах), то можно воспользоваться одним из нижеследующих методов.
Собственно сжатие
Для сжатия понадобится вот такой кусочек кода
ob_start ("ob_gzhandler");
header("Content-type: text/css; charset: UTF-8");
header("Cache-Control: must-revalidate");
$offset = 60 * 60 ;
$ExpStr = "Expires: " .
gmdate("D, d M Y H:i:s",
time() + $offset) . " GMT";
header($ExpStr);
?>
Этот код делает следующее:
1. Использует PHPшный
ob_gzhandler для посылки сжатых данных. Эта функция сначала проверит может ли броузер принимать контент типа 'gzip,deflate' encoding;при отрицательном ответе посылает несжатые данные.
2. Посылает header с content type и кодировкой файла - здесь это text/css и UTF-8.
3. Далее проверяет надо ли уже обновлять кэш для этого файла
4. Посылает информацию о том, сколько хранить файл в кэше до следующей загрузки.
Метод первый
Первый метод заключается в переименовании вашего CSS файла в .php. При этом прикрепление к страничке будет выглядеть так:
@import url(mycss.php);
Ну и в начало файла нужно добавить кусочек кода указанный выше.
Метод второй
Второй метод чуть более универсальный. Тут не надо будет ничего менять в CSS файлах. Однако он требует правки .htaccess файла.
Во-первых нужно сохранить код указанный выше, например в файл “gzip-css.php”.
А затем добавить в .htaccess файл следующие строки:
AddHandler application/x-httpd-php .css
php_value auto_prepend_file gzip-css.php
php_flag zlib.output_compression On
Пример
Я применил первый метод на зеркале ukr.net по адоесу
http://alegol.ukr.net/. Результат себя полностью оправдал.
Поскольку доступа к логам у меня нет, то я воспользовался сервисом websiteoptimisation.
Результаты можно увидеть по адресам:
alegol,
ukr.net
В результате размер CSS файла упал с 18Кб до 4.5Кб. Жаль нельзя логи посмотреть и узнать как оно на самом деле работает при массовых нагрузках.
Заключение
100% очень полезная штука особенно когда нет контроля над веб-сервером.
Однако есть несколько недочетов. Ходят слухи что есть какой то глюк в одной из версий ИЕ6, якобы он посылает инфу что может читать gzip, но на самом деле не раскодирует контент такого типа. Если кто то заметит подобный глюк или что то слышал об этих случаях просьба откликнуться в комменты.
Надо только еще перепроверить как оно нагружает сервер, ну а малым и средним сайтам 100% мастду.
Мну удалось найти такую инфу.