Должен ли я использовать YUI Compressor или новый компилятор Google Closure для сжатия моего JavaScript?

YUI Compressor был признан лучшим инструментом для минимизации, но Closure кажется, что он мог бы быть лучше.


person Josh Gibson    schedule 06.11.2009    source источник
comment
+1 за рассказ о закрытии Google, о котором я никогда не слышал :)   -  person Kaze no Koe    schedule 06.11.2009
comment
Я также добавлю, что здесь есть малоизвестный упаковщик: dean.edwards.name/packer это насколько я знаю тот, который дает наилучшие результаты, но вам нужно добавить все неявные точки с запятой, используйте для этого JSlint   -  person Kaze no Koe    schedule 06.11.2009
comment
packer потерял популярность, потому что его нужно распаковывать при каждом запуске.   -  person Nosredna    schedule 08.11.2009
comment
Я хотел поднять это и посмотреть, изменилось ли что-нибудь за годы, прошедшие с тех пор, как этот вопрос был впервые задан.   -  person J V    schedule 31.07.2012
comment
Это во многом зависит от вашего стиля кодирования, но в моем случае Packer почти всегда создает файлы большего размера, чем компрессор YUI. Я только недавно начал использовать компилятор Google Closure для одного проекта, который для этого проекта дал мне немного меньший результат, чем компрессор YUI.   -  person John Slegers    schedule 06.02.2014
comment
Я часто использовал замыкание, и это всегда экономило мне несколько лишних байтов.   -  person    schedule 20.03.2014


Ответы (7)


«Какой бы вы ни нашли лучший для вас», я думаю, что это общий ответ на данный момент - YUI был доступен дольше, поэтому, несомненно, будет тот, который в настоящее время имеет консенсус как лучший инструмент. Принимая во внимание, что Closure является новым для нас, поэтому у нас нет такого богатого опыта работы с Closure, как с YUI. Следовательно, я не думаю, что вы найдете веские аргументы в реальном мире, почему следует использовать Closure, основанные на опыте людей с ним просто потому, что он новый.

Это не значит, что вы не должны использовать Closure... просто мой способ сказать, я не думаю, что на это есть ответ, пока несколько человек не использовали 2 и не сравнили их.

Изменить: есть несколько ранних сравнений, говорящих о том, что Closure действительно дает улучшение: http://blog.feedly.com/2009/11/06/google-closure-vs-yui-min/
http://news.ycombinator.com/item?id=924426

Дальнейшее редактирование: стоит следить за списком проблем для закрытия: http://code.google.com/p/closure-compiler/issues/list

person AdaTheDev    schedule 06.11.2009

Из сравнений, которые я видел, Closure кажется явным победителем с точки зрения минимизации размера файла. В этой статье используются три популярные библиотеки JS (jQuery, Prototype, MooTools) для сравнения сжатия между YUI Compressor и Closure Compiler: http://www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor.-Comparing-the-Javascript-Compression-Tools.aspx

Closure выходит вперед в каждом тесте, особенно в его расширенном режиме, где он «минимизирует размер кода примерно на 20-25% больше, чем YUI Compressor, обеспечивая почти 60%-ное сжатие».

person Michael    schedule 14.11.2009

Замыкание можно использовать в простом или расширенном режиме. Простой режим достаточно безопасен для большей части кода JavaScript, поскольку он только переименовывает локальные переменные в функциях для дальнейшего сжатия.

Расширенный режим намного агрессивнее. Он будет переименовывать ключи в литералах объектов и вызовы встроенных функций, если сможет определить, что они возвращают простые значения без побочных эффектов.

Например:

function Foo()
{
  return "hello";
}

alert(Foo());

переводится на:

alert("hello");

И этот код:

var o = {First: "Mike", Last: "Koss"};
alert(o);

переводится на:

alert({a:"Mike",b:"Koss"});

Вы можете запретить расширенному режиму изменять значения ключей в литералах объектов, заключая имена в кавычки следующим образом:

{'First': "Mike", 'Last': "Koss"}

Вы можете попробовать эти и другие примеры на интерактивном сайте Closure Compiler Google.

person mckoss    schedule 07.11.2009
comment
Closure Compiler даже вытянет внутренности встроенных функций, значительно ускорив код. - person Nosredna; 08.11.2009
comment
Closure Compiler будет встраивать функции в простом режиме, но не через глобальную функцию. - person John; 15.01.2013

Похоже, что jQuery 1.5 только что переместился в UglifyJS:

Кроме того, с помощью этого переключателя мы перешли на использование UglifyJS из компилятора Google Closure. При его использовании мы заметили некоторые значительные улучшения размера файла, поэтому мы очень довольны переключением.

person Kevin Hakanson    schedule 01.02.2011
comment
Спасибо, что опубликовали это. Я даже не слышал о нем! - person Sonny; 09.03.2011
comment
Это быстрее и сжимает больше, чем YUI, и, конечно, лучше, чем устанавливать Java для Closure Compiler. - person rxgx; 25.03.2011
comment
Больше не соответствует действительности: docs.jquery.com/ - person SeanDowney; 26.07.2011
comment
Я вижу COMPILER = ${JS_ENGINE} ${BUILD_DIR}/uglify.js --unsafe в Makefile по адресу github.com/jquery/jquery/blob/master/Makefile - person Kevin Hakanson; 26.07.2011
comment
Их инструкции по сборке говорят: минимизированный (с Uglify.js), линтинговый (с JSHint) github.com/jquery/ jquery - person Sonny; 21.01.2013

Я думаю, это зависит от вашего кода. Если вы хотите скомпилировать свой собственный код, то я думаю, что стоит исправить код, чтобы он работал с Closure Compiler (некоторые вещи могут показаться немного неудобными в начале). Я верю, что Closure Compiler скоро станет лучшим выбором для таких задач, а также заставит вас немного привести код в порядок и поддерживать единый стиль (конечно, это зависит от ваших предпочтений, вы можете ненавидеть некоторые части, я делаю :P ).

Если вы зависите от других библиотек, то, на мой взгляд, вам следует немного подождать, пока они не выпустят версии, совместимые с Closure Compiler. Для большинства популярных библиотек это не займет много времени. И, возможно, вы можете предоставить исправления для тех «не очень активных» библиотек, которые вы используете сами.

Я говорю здесь о режиме Advanced Compilation, режим Simple Compilation, как некоторые указывали, довольно безопасен в использовании.

А вот и другое мнение - Закрытие Google ? Я не впечатлен. Возможно, немного жестковато, но читать приятно. Я думаю, только время покажет, какой из них лучше =)

person Maiku Mori    schedule 10.11.2009
comment
Потому что это не позволит тебе уйти с eval()? - person rxgx; 25.03.2011

По состоянию на октябрь 2012 года похоже, что компрессор YUI устарел или, по крайней мере, больше не будет использоваться в YUI: http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor/

person robd    schedule 17.03.2013
comment
Однако YUI Compressor все еще находится в разработке (последний выпуск в мае 2013 г.): yuiblog.com/blog/2013/05/16/yuicompressor-2-4-8-released github.com/yui/yuicompressor - person benebun; 11.12.2013

Здесь вы можете провести несколько тестов и посмотреть, что лучше в каждом браузере: http://jsperf.com/closure-vs-yui

person Erick Ribeiro    schedule 17.01.2013