Кто-нибудь скомпилировал jQuery против недавно выпущенного Google Closure компилятора?
Сообщалось о большой экономии в размере кода. Мне любопытно, в чем преимущество, если jQuery был скомпилирован с ним.
Кто-нибудь скомпилировал jQuery против недавно выпущенного Google Closure компилятора?
Сообщалось о большой экономии в размере кода. Мне любопытно, в чем преимущество, если jQuery был скомпилирован с ним.
Джон Ресиг сообщил об ошибке в рекурсивных функциях, когда он попытался скомпилировать новинку jQuery 1.4, поэтому есть несколько перегибов, которые будут разработаны. Я бы не использовал jQuery, скомпилированный с Closure Compiler, не убедившись, что он проходит тестовый стенд jQuery.
http://code.google.com/p/closure-compiler/issues/detail?id=1&can=1#c2
Я попытался с jQuery jQuery 1.3.2
jQuery-1.3.2.min.js 57254 Bytes
jQuery closure compiler 49730 Bytes
-----------------------------------
Reduced by 7524 Bytes
Saved 13.31% off the original size
Saved 10.87% off the gzipped size
Прибыль ~ 7 КБ
Но он также сообщает о 15 предупреждениях, и я не тестировал, работает ли он еще
С отключенными ADVANCED_OPTIMIZATION:
С включенными ADVANCED_OPTIMIZATIONS: он не работает без изменений. С включенными ADVANCED_OPTIMIZATIONS и все, что я могу найти для экспорта, экспортировано... оно все еще не совсем работает, и код уже до 53466 байт снова (и 18785 gzipped, что больше, чем сжатый код без ADVANCED_OPTIMIZATIONS), поэтому это не похоже на выигрышное предложение.
Компилятор замыкания исключает любой код, который вы фактически не используете. Типичная веб-страница будет использовать только небольшую часть функций jQuery, поэтому наибольшую выгоду вы получите от компиляции кода вместе с полной версией jQuery.
Как и в jQuery 1.4, Google Closure Compiler используется в качестве метода майнинга по умолчанию для выпусков jQuery. Однако jQuery использует только параметры SIMPLE_OPTIMIZATIONS. Команда jQuery не планирует поддерживать ADVANCED_OPTIMIZATIONS.
Из любопытства я собрал тест SlickSpeed из последних прототипов и jQuery-библиотек, сжатых с помощью YUI и Closure. Здесь вы можете запустить тесты.
Как отмечали другие, компиляция с ADVANCED_OPT не работает, но если кто-то хочет выполнить эту работу, я с удовольствием добавлю результаты в тест SlickSpeed.
Не закрывает ли просто минимизировать и переименовывает vars? jQuery уже имеет .min-версию. Минимизация с закрытием снова, вероятно, будет минимально полезной и потенциально опасной.
Изменить: я просто сделал это.
Compilation was a success!
Original Size: 55.91KB (19.28KB gzipped)
Compiled Size: 54.05KB (18.28KB gzipped)
Saved 3.34% off the original size (5.18% off the gzipped size)
Это верх над уже запущенной версией. Здесь есть демо: http://closure-compiler.appspot.com/home
Я использовал Closure (с ADVANCED_OPTIMIZATIONS), чтобы сжать код javascript для сайта с одной страницей, который я размещаю, и увидел значительную экономию по сравнению с YUI Compressor. Поэтому я начал изучать сжатие jQuery для этого сайта, так как он, конечно же, не использует библиотеку jQuery для entier.
Я получаю предупреждения каждый раз, когда я запускаю jQuery через компилятор, в основном указывая части кода, которые не используются. Даже при этом скомпилированный код не работает. Основная проблема, которую я вижу, заключается в том, что компилятор не экспортирует данные должным образом. Я смог легко экспортировать функции из своего собственного кода, присоединив их к объекту window, но я еще не смог это сделать с помощью jQuery.
Хорошей новостью является то, что Джон Ресиг уже экспериментирует с Closure. Я подозреваю, что в ближайшем будущем мы увидим новые версии совместимых.
Я попытался с помощью своего онлайн-компилятора, он работает хорошо.
jQuery не совместим (пока) с компилятором Closure в расширенном режиме. Я согласен, что было бы очень удобно сделать его совместимым, потому что его синтаксис с привязкой к методу очень легко дает прототип виртуализации для значительно улучшенной скорости выполнения.
Фактически, среди популярных библиотек JavaScript (кроме библиотеки Closure), только Dojo Toolkit совместим с режимом Closure Advanced.