Компилятор Google Closure с приложениями jQuery
У меня много времени инвестировано в jquery и большое приложение, построенное с ним. Недавно я просматривал Google Closure Library, но в это время нашел, что это не так элегантно, как jquery. Я считаю, что это может иметь некоторый потенциал и будет изучать его больше, но на данный момент я намерен продолжать использовать jQuery в качестве базовой фреймворка.
Однако я очень впечатлен Google Closure Compiler. Я хотел бы начать использовать его во время процесса сборки моего приложения. К сожалению, не совсем ясно, насколько легко будет использовать его для проектов, которые не соответствуют стандартным стандартам Google Closure.
Есть ли лучшие методы или хорошие ресурсы для разработки проектов на основе jquery и использования компилятора Google Closure? Например:
-
Имеет ли смысл компилировать jquery и jquery-ui с ним, или я должен продолжать указывать на эти ресурсы в CDN Google? Я уверен, что мои jquery и jquery-ui будут меньше, поскольку я не использую все функции библиотек, но указание на CDN увеличивает вероятность того, что файл уже находится в кэше посетителя.
-
Мое приложение разбито на множество файлов с файлом на каждую функцию. Я хотел бы объединить их в определенном порядке и минимизировать их в файл в разделе на моем сайте. Я бы хотел автоматизировать этот процесс.
-
В настоящее время мой проект имеет java-сервер и построен с Maven. Имеет ли смысл добавить компилятор Google Closure в этот процесс сборки?
В принципе, я ищу любые хорошие ресурсы, специфичные для использования компилятора Google Closure с jQuery.
Ответы
Ответ 1
Компилятор Google Closure - это jQuery или любой другой агностик библиотеки. Он имеет два типа оптимизаций -
Я пробовал применять передовые оптимизации, но это сильно нарушило мое приложение. Если он сделает то же самое, вы можете либо попытаться исправить ваше приложение, либо использовать простую оптимизацию. Снижение на 32% с простой оптимизацией и около 68% с продвинутой оптимизацией, но это все равно не получилось.
Перемещение конкатенации JS автоматическим способом в процесс сборки - это, безусловно, путь. См. Управление зависимостями JavaScript.
jQuery уже сильно оптимизирован для размера байта, поэтому я сомневаюсь, что вы сможете сжать достаточное количество сока с помощью Google Closure Compiler, но стоит попробовать в сочетании с вашим проектом.
Я вижу Google Closure Library в благоприятном свете, но не использовал ее, так как сейчас я сильно инвестировал в MooTools. Глядя на него API, похоже, он имеет довольно широкий охват того, что он может предложить, помимо манипуляций с DOM, обработки AJAX, обработки событий и т.д..
Ответ 2
$(elem)['width']()
вместо $(elem).width()
Это работает с ADVANCED_OPTIMIZATIONS, так что компилятор закрытия не реорганизует методы jQuery.
Ответ 3
Я полагаю, что с 1.4.2 (возможно, раньше) jQuery по умолчанию используется с помощью Google Closure Compiler. Поэтому, вероятно, лучше продолжить ссылку на jQuery/jQuery UI через CDN Google. Тем не менее, все еще есть преимущества для интеграции компилятора Closure в процесс сборки, чтобы объединить и минимизировать ваши JS файлы. А именно, уменьшенные запросы JS на загрузку страницы и меньшие данные, передаваемые в надежде улучшить производительность загрузки страницы на стороне клиента. Вот некоторые из проблем, с которыми мы столкнулись при интеграции компилятора Closure в наш процесс сборки:
-
Построение команды компиляции. Нам понадобилось средство вызова компилятора со всеми необходимыми параметрами в автоматическом режиме во время процесса сборки. Для нас это означало запись консольного приложения для создания команды. Если сценарий оболочки доступен в вашей среде, это может быть преимуществом.
-
Управление зависимостями. У компилятора Closure есть возможность автоматически сортировать порядок объединенной JS, чтобы сохранялись зависимости. Чтобы использовать эту функцию, файлы JS должны быть аннотированы с помощью goog.provide\goog.require
, чтобы сообщить компилятору, каковы зависимости (- manage_closure_dependencies). Компилятор также исключает любую JS, которая не требуется (т.е. Не ссылается через оператор goog.require
) из объединенного JS. Вот несколько вещей, на которые нужно обратить внимание:
- Если вы хотите включить все JS файлы в комбинированный вывод, убедитесь, что вы включили "манифестный" JS файл в компиляцию, которая содержит только инструкции
goog.require
для каждого файла, который будет включен в комбинированный script (т.е. no goog.provide
).
- Если вы не используете библиотеку Closure, убедитесь, что вы компилируете с помощью
SIMPLE_OPTIMIZATIONS
или выше. В противном случае компилятор не удалит инструкции goog.provide/goog.require
. Кроме того, вы можете также определить свои собственные функции goog.provide/goog.require
JS, чтобы избежать ошибок.
- Убедитесь, что существуют циклические зависимости нет, или сталкиваются с последствиями.
-
Компиляция отладочной версии комбинированного script. При необходимости вы можете скомпилировать отладочную версию объединенного script с помощью флага --formatting PRETTY_PRINT
. Это приведет к выпуску эквивалентного script, отформатированного без пробелов для разработки/отладки.
Несмотря на то, что документация компилятора Closure может быть редкой порой, ее достаточно для начала работы по большей части и постоянно совершенствуется - поэтому регулярно проверяйте обновления, а не только SO;)
Надеюсь, что это поможет.
Ответ 4
jQuery не совместим (пока) с компилятором Closure в расширенном режиме. Я согласен, что было бы очень удобно сделать его совместимым, потому что его синтаксис с привязкой к методу очень легко дает прототип виртуализации для значительно улучшенной скорости выполнения.
Фактически, среди популярных библиотек JavaScript (кроме библиотеки Closure), только Dojo Toolkit совместим с режимом Closure Advanced.
http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t
Ответ 5
Использование jQuery с расширенным режимом компилятора закрытия
Ответ 6
Получение jQuery для работы с компилятором/компонентом закрытия было для меня трудным, но поскольку вы имеете дело с несколькими файлами, я думаю, что важно, чтобы вы посмотрели на опции модулей здесь:
Использование опции -module в Closure Compiler для создания нескольких выходных файлов
Я искал хорошую документацию в Интернете, но есть ОЧЕНЬ ОЧЕНЬ. Используя один jQuery extern, я смог скомпилировать с расширенными функциями - с несколькими файлами и т.д.
@echo off
java -jar bin\compiler.jar ^
--compilation_level=ADVANCED_OPTIMIZATIONS ^
--externs "externs\jquery-1.8.js" ^
--language_in=ECMASCRIPT5_STRICT ^
--warning_level=VERBOSE ^
--module_output_path_prefix .\compiled\ ^
^
--module_wrapper core:"(function(){%%s%%})();" ^
--js ".\corelib.js" ^
--module core:1 ^
^
--module_wrapper somescript"(function(){%%s%%})();" ^
--js ".\some_other_runtime_loaded_script" ^
--module somescript:1:core ^
^
--module_wrapper somescript1:"(function(){%%s%%})();" ^
--js ".\some_other_runtime_loaded_script" ^
--module somescript1:1:core
описания
--module_wrapper name:wrapper
Это позволяет обернуть ваши скрипты в закрытии - поскольку компилятор по умолчанию удалит их. Если вы используете "использовать строгий", как я, то нет нет.
--module name:#:dependency
name Name of the script that will get written
# number of scripts above that line to include into this script
dependency What script does this depend on?
Ответ 7
Tauren, вы можете протестировать свой код, используя closure-compiler home. Вы можете импортировать свою библиотеку JQuery или что-то еще и попробовать. Если возможно, определите свой код JavaScript, используя анонимную функцию, которая позволяет избежать конфликтов имен. Используйте пространства имен, используя функцию библиотеки Google. Еще один хороший ресурс, который может вам помочь, - Руководство по стилю JavaScript JavaScript
Ответ 8
Вы можете использовать kjscompiler: https://github.com/knyga/kjscompiler и указать любые библиотеки, которые вам нравятся как внешние. Они не будут минимизированы. Действительно приятное решение.