Есть ли польза от минимизации JavaScript перед его распаковкой?
Есть ли какая-то действительная цель минимизации перед сжатием? Весьма маловероятно, что сжатый файл будет меньше, если его сначала свернуть.
Я спрашиваю, потому что диагностировать производственные проблемы в минимизированном коде существенно сложнее, и мне интересно, подвергают ли себя люди этому без всякой цели.
5 ответов
Да, безусловно, выгода.
Минимизация - это сжатие с потерями, тогда как сжатие без потерь. Следовательно, при минимизации вы удаляете ненужные данные (например, комментарии и длинные имена переменных), которые всегда помогут сделать ваш файл меньше. Даже с gzip в большинстве случаев все равно будет разница.
Пример:
function foo(this_is_my_variable){
var this_is_my_other_variable = 0;
this_is_my_other_variable = this_is_my_other_variable + this_is_my_variable;
return this_is_my_other_variable;
}
Это может быть уменьшено до:
function foo(a){
var b = 0;
b = b +a;
return b;
}
Или, если минификатор умный:
function foo(a){
return a;
}
Весь код дает одинаковые результаты, но размер сильно отличается.
Что касается необработанного размера файла, вот пример (jQuery 1.4.2):
$ curl http://code.jquery.com/jquery-1.4.2.js | gzip > jquery.gz
$ curl http://code.jquery.com/jquery-1.4.2.min.js | gzip > jquery-min.gz
$ ls -la jquery*
-rw-r--r-- 1 me staff 24545 Apr 7 12:02 jquery-min.gz
-rw-r--r-- 1 me staff 45978 Apr 7 12:02 jquery.gz
Таким образом, уменьшенная версия составляет около половины размера.
Может быть. Помимо удаления пробелов, минимизация JavaScript может привести к большему количеству повторений одного и того же текста, что может означать немного более высокое сжатие с помощью gzip. К счастью, это легко сделать до и после, так как gzip
Средство командной строки, распространенное в *nix и доступное для Windows, использует тот же алгоритм сжатия (хотя и не совсем в том же формате).
Это также может помочь ускорить синтаксический анализ кода JavaScript в браузере. В зависимости от размера ваших файлов браузер может потратить значительное количество времени на анализ и токенизацию файла, что будет уменьшено при минимизации.
Конечно, только бенчмаркинг и профилирование подскажут вам, принесет ли это пользу для вашей конкретной ситуации.
Что мне больше всего подходит, так это то, что я храню на своем веб-сайте как минимизированные, так и не минимизированные версии всех моих файлов.js, и просто переключаю конфигурацию между ними. Таким образом, обычное производство может использовать минимизированную версию, а затем, если мне нужно что-то отладить, просто нажмите переключатель, и вместо этого будет запущена неминифицированная версия. (Процесс сборки гарантирует, что минимизированные и не минимизированные версии, конечно, синхронизируются)
Я всегда видел заметное уменьшение конечного числа байтов при минимизации перед gzip.
У меня есть 20-минутный скрипт php хакерской работы, который взаимодействует с компрессором yui и компилятором googles closure. Он показывает мне байты до и после, в том числе после gzip, так что мне довольно легко это проверить.