По сравнению с JavaScript, сжимать CSS относительно просто. В силу практически полного отсутствия строк, заключенных в кавычки (в основном пути и названия шрифтов), мы можем изничтожить проблемы обычными регулярными выражениями. Когда же мы действительно встречаемся со строкой в кавычках, то мы можем объединить множественные пробелы в один (так как мы не рассчитываем обнаружить их в количестве больше чем 1 в URL или названиях шрифтов). Простейший скрипт на Perl может обеспечить нам все необходимые преобразования:
#!/usr/bin/perl my $data = ''; open F, $ARGV[0] or die "Не получается открыть исходный файл: $!"; $data .= $_ while <F>; close F; $data =~ s!\/\*(.*?)\*\/!!g; # удаляем комментарии $data =~ s!\s+! !g; # сжимаем пробелы $data =~ s!\} !}\n!g; # добавляем переводы строки $data =~ s!\n$!!; # удаляем последний перевод строки $data =~ s! \{ ! {!g; # удаляем лишние пробелы внутри скобок $data =~ s!; \}!}!g; # удаляем лишние пробелы и синтаксис # внутри скобок print $data;
Осталось прогнать все наши CSS-файлы через этот скрипт, чтобы сжать их, например так:
perl compress.pl site.source.css > site.compress.css
Путем простых текстовых преобразований можно уменьшить общий объем передаваемых данных почти на 50% (конечный выигрыш очень сильно зависит от стиля кодирования; обычно будет получен менее впечатляющий результат), что обеспечит более быструю работу сайта для конечных пользователей в том случае, если gzip
применить не удается.