YUI Compressor был признан лучшим инструментом для минимизации, но Closure кажется, что он мог бы быть лучше.
Должен ли я использовать YUI Compressor или новый компилятор Google Closure для сжатия моего JavaScript?
Ответы (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
Из сравнений, которые я видел, 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%-ное сжатие».
Замыкание можно использовать в простом или расширенном режиме. Простой режим достаточно безопасен для большей части кода 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.
Похоже, что jQuery 1.5 только что переместился в UglifyJS:
Кроме того, с помощью этого переключателя мы перешли на использование UglifyJS из компилятора Google Closure. При его использовании мы заметили некоторые значительные улучшения размера файла, поэтому мы очень довольны переключением.
COMPILER = ${JS_ENGINE} ${BUILD_DIR}/uglify.js --unsafe
в Makefile по адресу github.com/jquery/jquery/blob/master/Makefile
- person Kevin Hakanson; 26.07.2011
Я думаю, это зависит от вашего кода. Если вы хотите скомпилировать свой собственный код, то я думаю, что стоит исправить код, чтобы он работал с Closure Compiler (некоторые вещи могут показаться немного неудобными в начале). Я верю, что Closure Compiler скоро станет лучшим выбором для таких задач, а также заставит вас немного привести код в порядок и поддерживать единый стиль (конечно, это зависит от ваших предпочтений, вы можете ненавидеть некоторые части, я делаю :P ).
Если вы зависите от других библиотек, то, на мой взгляд, вам следует немного подождать, пока они не выпустят версии, совместимые с Closure Compiler. Для большинства популярных библиотек это не займет много времени. И, возможно, вы можете предоставить исправления для тех «не очень активных» библиотек, которые вы используете сами.
Я говорю здесь о режиме Advanced Compilation, режим Simple Compilation, как некоторые указывали, довольно безопасен в использовании.
А вот и другое мнение - Закрытие Google ? Я не впечатлен. Возможно, немного жестковато, но читать приятно. Я думаю, только время покажет, какой из них лучше =)
eval()
?
- person rxgx; 25.03.2011
По состоянию на октябрь 2012 года похоже, что компрессор YUI устарел или, по крайней мере, больше не будет использоваться в YUI: http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor/
Здесь вы можете провести несколько тестов и посмотреть, что лучше в каждом браузере: http://jsperf.com/closure-vs-yui