Вопрос по minify, google-closure, google-closure-compiler, javascript, jquery – jQuery скомпилирован с помощью Google Closure Compiler

38

Кто-нибудь скомпилировал jQuery против недавно выпущенного Google?закрытие компилятор?

Сообщалось об огромной экономии в размере кода. Мне интересно, какая выгода, если jQuery был скомпилирован с ним.

Думаю, я подожду, пока Ресиг и команда выпустят новую -мин или специальную закрытую версию. Я не хотел бы сжимать библиотеку, чтобы выяснить, что определенные функции не работают или не работают, как ожидалось. Tom
Мой первый (и единственный) отрицательный голос. Вопрос не заслуживает голосования «за», если ФП не принимает ответ (или, по крайней мере, указывает, что является недопустимым в предложенных ответах). Частью хорошего вопроса является знание принятого решения. Karl

Ваш Ответ

10   ответов
6

jquery-1.3.2.min.js: 57254 байтаjquery-1.3.2.closure.js 55346 байт (-3,4%)jquery-1.3.2.min.js.gz: 19680 байтjquery-1.3.2.closure.js.gz: 18666 байт (-5,2%)

С включенным ADVANCED_OPTIMIZATIONS: он не работает без изменений. С включенным ADVANCED_OPTIMIZATIONS и всем, что я могу найти для экспорта, экспортируется ... он все еще не совсем работает, и код уже снова достигает 53466 байт (и 18785 gzipped, чтоБольше чем сжатый закрытый код без ADVANCED_OPTIMIZATIONS), поэтому это не похоже на выигрышное предложение.

Флаг ADVANCED_OPTIMIZATIONS оптимизирует не размер файла, а скорость выполнения (он пытается изменить код, чтобы он работал быстрее, а не быстрее). Kekoa
Меньший размер файла часто приводит (но не всегда) к более быстрому коду. Удаление и вставка мертвого кода служит обеим целям. Blaise
@ Кекоа, из того, что я прочиталонлайн И вРаспечататьПохоже, что размер файла (и скорость загрузки) является основной целью ADVANCED_OPTIMIZATIONS и компилятора в целом. hyperslug
Встраивание не всегда уменьшает размер файла, если есть много вызовов. SOFe
11

Я пробовал с 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 предупреждений, и я не проверял, работает ли он до сих пор

5

Google Closure Compiler используется в качестве метода минимизации по умолчанию для выпусков jQuery. Однако jQuery использует только настройки SIMPLE_OPTIMIZATIONS. Команда JQuery имеетнет планов по поддержке ADVANCED_OPTIMIZATIONS.

Устаревшее: «Тем не менее, мы считаем, что можем добиться еще больших результатов, и хотели бы предложить любому пользователю автоматизированные способы создания оптимально минимизированного файла, который включает в себя как код приложения, так и только необходимые части jQuery. В частности, мы работаем с командой Google Closure Compiler, чтобы посмотреть, сможем ли мы использовать его опцию ADVANCED_OPTIMIZATIONS. У нас будет больше информации о нашем прогрессе по мере его развития ».blog.jquery.com/2011/11/22/call-for-jquery-1-8-ideas David Mulder
2

otype и jQuery, сокращенными с помощью YUI и Closure.Вы можете запустить тесты здесь.

Как уже отмечали другие, компиляция с ADVANCED_OPT не работает, но если кто-то захочет сделать эту работу, я буду рад добавить результаты в тест SlickSpeed.

Нет, ссылка больше не работает. Orvid King
Эта ссылка все еще работает? Chris Frederick
1

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

Теоретически вы можете смешать свой JavaScript с jQuery и сделать Closure переименовать все.click,.each и т. д. для дополнительной экономии. Tinister
Закрывающий компилятор не просто минимизирует и переименовывает. Если вы скомпилируете большую JS-программу, вы увидите, что она перекомпилирована. Он поместит код в строку там, где это имеет смысл. Это реорганизует сложные условия и т. Д. Nosredna
Отличная идея. Jourkey
Да, JQuery уже использует минификатор. Я только что прочитал статью о том, как Prototype был перекомпилирован с использованием Closure вместо YUI Compressor. Версия Prototype для Closure была на 60% меньше, чем YUI Compressor. Это сумасшедший маленький и создать для ускорения веб-приложений. Ted
Вы не размещаете JS на своей HTML-странице. hobbs
-1

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

Фактически, из популярных библиотек JavaScript (кроме Closure Library, то есть) только Dojo Toolkit совместим с расширенным режимом Closure.

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

0

онлайн компилятор, это работает хорошо.

7

который вы на самом деле не используете. Типичная веб-страница будет использовать только небольшую часть функций jQuery, поэтому наибольшую выгоду принесет компиляция вашего кода вместе с полной версией jQuery.

Это намерение да, но современный компилятор замыкания далек от совершенства. David Mulder
Но, конечно, вы теряете какую-либо выгоду от кэширования кода jQuery на компьютере пользователя (если он есть). Nosredna
На самом деле, в прошлый раз, когда я проверял, что Closure фактически не удаляет неиспользуемые функции из jQuery, я думаю, потому что они на самом деле не определены как отдельные функции. DisgruntledGoat
Если это так, разве Closure Compiler не удалит почти весь код, когда вы компилируете только библиотеку jQuery? Petr Peller
1

чтобы сжать код JavaScript для одностраничного сайта, который я размещаю, и увидел значительную экономию по сравнению с YUI Compressor. Поэтому я начал изучать сокращение jQuery для этого сайта, поскольку он, конечно, не использует библиотеку entier jQuery.

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

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

26

когда он пытался скомпилировать ночной jQuery 1.4, так что есть несколько изломов, которые нужно решить. Я бы не использовал jQuery, скомпилированный с Closure Compiler, не убедившись, что он проходит тестовый стенд jQuery.

http://code.google.com/p/closure-compiler/issues/detail?id=1&can=1#c2

Просто небольшое замечание: оказывается, что вызывать Closure Compiler довольно просто. Помимо прочего, это оптимизирующий компилятор, удаляющий мертвый код и предоставляющий полезные предупреждения во время компиляции посредством статического анализа. Luís Oliveira
Подчеркивая, что теперь, когда выпущен jQuery 1.4, исправлены ошибки, и теперь компилятор Closure является основным минификатором для jQuery :) Matchu

Похожие вопросы