Подтвердить что ты не робот

Компилятор 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.

4b9b3361

Ответ 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

Ответ 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 и указать любые библиотеки, которые вам нравятся как внешние. Они не будут минимизированы. Действительно приятное решение.