Есть ли польза от минимизации 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, так что мне довольно легко это проверить.

Другие вопросы по тегам