В-четвертых, получается, что библиотека, жмущая лучше всего, проигрывает более умеренной сопернице при дополнительном архивировании результата. В нашем случае Minifier уступает CSS Tidy.
В общем, если мы не хотим дополнительно морочить себе голову, то можно просто архивировать CSS-файлы (в среднем выигрыш 79%) либо проводить простую «подчистку мусора» перед архивированием (в среднем выигрыш 82%). Если мы заботимся о количестве байтов, то стоит изучить действие CSS Tidy и Minifier (их прелесть заключается в алгоритме перегруппировки селекторов) и использовать их, либо разработать собственное приложение.
По сравнению с JavaScript, сжимать CSS относительно просто. В силу практически полного отсутствия строк, заключенных в кавычки (в основном пути и названия шрифтов), мы можем изничтожить проблемы обычными регулярными выражениями. Когда же мы действительновстречаемся со строкой в кавычках, то мы можем объединить множественные пробелы в один (так как мы не рассчитываем обнаружить их в количестве больше чем 1 в URL или названиях шрифтов). Простейший скрипт на Perl может обеспечить нам все необходимые преобразования:
#!/usr/bin/perl
my $data = '';
open F, $ARGV[0] or die "Не получается открыть исходный файл: $!";
$data .= $_ while ;
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 применить не удается.
2.4. JavaScript: жать или не жать?
Давайте рассмотрим далее сжатие JavaScript-файлов и проведем анализ всех наиболее известных средств статической минимизации JavaScript-кода. Нам нужно, по сути, ответить на три основных вопроса:
Имеет ли смысл пользоваться каким-либо минимизатором JavaScript-кода?
Есть ли среди них универсальное средство, показывающее лучшие результаты в подавляющем большинстве случаев?
Если такого средства нет, то каковы критерии использования набора инструментов?
Итак, с постановкой задачи разобрались. Теперь перейдем собственно к самим инструментам и графикам степени сжатия исходного кода при их применении.
Всего удалось обнаружить 5 кардинально различных средств для минимизации JavaScript-файлов, которые могут работать как автономные приложения (в расчете на то, что их можно будет далее запускать по событию или по расписанию, ориентируясь, в общем, на автоматизацию процесса публикации файлов на production-сервере).
JSMin ( http://www.crockford.com/javascript/jsmin.html). Наиболее широко распространенный минимизатор, основывается на простых правилах, перенесен на множество языков, в том числе и на сам JavaScript.
JavaScript::Minifier ( http://search.cpan.org/~pmichaux/JavaScript-Minifier-1.04/lib/JavaScript/Minifier.pm). Отдельный «перловый» модуль, по степени сжатия очень близок к JSMin, однако генерирует отличный от первого синтаксис.
Dojo ShrinkSafe aka Rhino ( http://dojotoolkit.org/docs/shrinksafe). Первоначально разрабатывался как Rhino, затем был включен в состав Dojo. Запускается как JAR-модуль.
Dean Edwards Packer ( http://dean.edwards.name/packer/). Достаточно широко известный инструмент от не менее известного Dean Edwards. Перенесен на некоторые языки, в том числе на PHP4/5.
YUI Compressor ( http://developer.yahoo.com/yui/compressor/). В представлении также не нуждается — именно на его основе проведена оптимизация сайтов Yahoo. Для анализа использовалась версия 2.2.5. Запускается как JAR-модуль.
Для анализа были найдены несколько достаточно больших и широко используемых JavaScript-файлов (вполне возможно, что вы их загружали в этом месяце или даже используете из кэша каждый день) разных размеров и степеней изначального сжатия.
Все исходные файлы сжимались всеми представленными инструментами, затем архивировались. Далее все полученные данные нужно было выстроить в какой-то последовательности, которая бы выявляла характер и преимущества сжатия файлов сторонними средствами. Критерием для такой последовательности была выбрана изначальная «сжимаемость» файлов (то, насколько они хорошо архивируются).
Читать дальше