Что вы используете, чтобы свернуть и сжать библиотеки JavaScript?

Что вы используете, чтобы свернуть и сжать библиотеки JavaScript?

17 ответов

Решение

Я использую YUI Compressor. Кажется, чтобы сделать работу хорошо!

Я использовал YUI Compressor в течение долгого времени и у меня не было проблем с ним, но недавно я начал использовать Google Closure Compiler и добился определенных успехов. Мои впечатления об этом пока:

  • Как правило, он превосходит YUI Compressor с точки зрения уменьшения размера файла. Небольшим количеством в простом режиме и большим количеством в расширенном режиме.
  • Простой режим до сих пор был таким же надежным, как YUI Compressor. Ничто из того, что я кормил, не показало проблем.
  • Расширенный режим "компиляции" отлично подходит для некоторых скриптов, но резкое уменьшение размера вашего скрипта происходит за счет большого вмешательства в ваш код, который имеет неплохие шансы его сломать. Существуют способы решения некоторых из этих проблем, и понимание того, что они делают, может в значительной степени избежать проблем, но я обычно избегаю использования этого режима.

Я перешел к использованию Google Closure Compiler в простом режиме "компиляции", потому что он немного превосходит YUI Compressor в целом. Я использовал его значительно меньше, чем YUI Compressor, но из того, что я видел до сих пор, я бы порекомендовал его.

Еще одна вещь, которую я еще не попробовал, но звучит многообещающе, - UglifyJS Михая Базона.

У вас есть стадо возможностей здесь:

Исходя из моего личного опыта, я бы порекомендовал вам использовать Dojo SDK для создания пользовательской сборки, которую затем можно настроить на использование обычного компилятора ShrinkSafe или Google Closure, которые они теперь также поддерживают.

С точки зрения сжатия, я думаю, что Google Closure - это тот, который пока дает мне лучшие результаты, однако я обычно доволен ShrinkSafe, и он немного старше и надежнее, в то время как Closure Compiler выглядит немного новеньким в блоке. (который, возможно, ваши заинтересованные стороны не слишком любят, например).

Некоторые люди клянутся только Компрессором YUI все же. Лично я не могу ручаться за это.

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

Вы также можете найти другие темы на эту тему и найти информацию в документации поддержки инструментов. Возможно, вы также захотите взглянуть на JSBuilder2, своего рода подвеску к инструменту сборки Dojo (так, используя ShrinkSafe или Closure Compiler) для ExtJS (используя компрессор YUI).

(К сожалению, будучи новым пользователем SO, я не могу добавить более одной ссылки, поэтому я не могу напрямую связываться с инструментами.)

РЕДАКТИРОВАТЬ: относительно проблем, выраженных в некоторых ответах, что сжатие может привести к ошибкам и что это облегчает отладку, поскольку код не искажен: да, это действительная проблема. Тем не мение:

  • вы получите очень значительное улучшение с точки зрения пропускной способности, если будете использовать минификатор, даже с включенным сжатием gzip (и вы можете научиться использовать сжатие gzip, делая жизнь компрессора проще
  • Вы должны просто попробовать свой код в режиме отладки и производства, чтобы убедиться, что поведение идентично. Я имею в виду, это тоже часть твоей работы...
  • некоторые из этих компрессоров были выпущены некоторое время назад и не будут вносить ошибки в ваш код. Они на самом деле просто реорганизуют вещи и подставляют строки, правда.
  • некоторые компрессоры (например, система сборки dojo) поставляются с опциями, позволяющими вам создавать как сжатые, так и несжатые выходные данные, так что вы можете затем включить различные режимы для отладки и производства, используя, например, параметры запроса.

Я совсем не минимизирую JavaScript: сжатие gzip достаточно для меня и имеет дополнительное преимущество, заключающееся в том, что сообщения об ошибках все равно будут полезны.

Я тоже использую YUI Compressor. У меня есть задача муравья, которую я использую в своих проектах:

<!--
YUI Compressor tasks 
http://www.julienlecomte.net/yuicompressor/README
-->
<property name="yuicompressor.jar"
           value="C:/devlibs/yuicompressor-2.2.4/build/yuicompressor-2.2.4.jar"/>

<target name="js.compress">
    <!-- Create min directory under js direcrtory if it doesnt exist -->
    <mkdir dir="${js-directory}/min" />

    <apply verbose="true" executable="java" parallel="false" failonerror="true">
        <fileset dir="${js-directory}" includes="*.js"/>
        <arg line="-jar"/>
        <arg path="${yuicompressor.jar}"/>
        <srcfile/>
        <arg line="-o"/>
        <mapper type="glob" from="*.js" to="${js-directory}/min/*-min.js"/>
        <targetfile/>
    </apply>
</target>

Упаковщик Дина Эдварда достигает довольно хороших коэффициентов сжатия. Он имеет реализации командной строки, что позволяет использовать его в процессе непрерывной интеграции.

UglifyJS - новый.

UglifyJS сжимает лучше, чем YUI Compressor и почти наравне с Google Closure Compiler. Например, сжатая версия jQuery из компилятора Google Closure только на 403 байта меньше, чем версия, созданная UglifyJS - впечатляет! UglifyJS также является самым быстрым для дальнего удара, опережая Closure более чем на 6 секунд!

Кроме того, код, созданный UglifyJS, безопаснее, чем код, создаваемый Closure. Например, Closure не знает, как обращаться с eval или с {} - он просто регистрирует ошибку и все равно продолжает переименовывать переменные. Это, очевидно, приводит к неработающему коду. UglifyJS не имеет этой проблемы.

Более подробную информацию можно найти здесь: http://badassjs.com/post/971960912/uglifyjs-a-fast-new-javascript-compressor-for-node-js

Инструменты закрытия Google

Вы можете сопоставить минимизированную версию с обычным исходным кодом для отладки в Firebug с их дополнением.

Я пробовал компрессор YUI раньше, но он выдает мне сообщение об ошибке.

Я предлагаю использовать JSMIN для минимизации вашего JavaScript:

http://www.crockford.com/javascript/jsmin.html

Вот решение от Microsoft, которое вы можете интегрировать в Visual Studio для автоматической минимизации файлов при создании проекта.

Установить:

Загрузите MSI с: http://aspnet.codeplex.com/releases/view/40584

Возможно, вам придется перезагрузить компьютер после его завершения.

Использовать:

Отредактируйте ваш файл.csproj и добавьте следующее в конец файла (но перед </Project> тег):

<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />

<Target Name="AfterBuild">
    <ItemGroup>
        <JS Include="**\*.js" Exclude="**\*.min.js;Scripts\*.js" />
        <CSS Include="**\*.css" Exclude="**\*.min.css" />
    </ItemGroup>
    <AjaxMin 
    JsSourceFiles="@(JS)"
    JsSourceExtensionPattern="\.js$"
    JsTargetExtension=".min.js"
    CssSourceFiles="@(CSS)"
    CssSourceExtensionPattern="\.css$"
    CssTargetExtension=".min.css"/>
</Target>

Теперь, когда вы создаете свой проект, все CSS и js-файлы, которые не заканчиваются на.min.js,.min.css, будут минимизированы (см. Атрибут "Исключить", чтобы исключить другие файлы из минимизированного).

http://code.google.com/p/jsmin-php/

Старый добрый Даг Крокфорд:-) Прелесть этого в том, что с контролем кэша вы можете получить немного автоматизированное сжатие только тогда, когда это необходимо. Или в одном из моих проектов я просто выводил сжатые / сжатые файлы и удалял их, когда вносил изменения. Для среды разработки я просто не вызываю сценарий минификации.

Вот статья, в которой описано, как использовать YUI Compressor для минимизации файлов во время сборки: Сжатие файлов JS как часть вашего процесса сборки

http://caja.appspot.com/tools/index выполняет все три HTML/CSS/JS.

Я использую простой (3-4 строки) скрипт-обертку вокруг JavaScript:: Minifier:: XS.

Я использую Perl's JavaScript::Minifier. Это работает довольно хорошо, и вы можете, например, заменить некоторые фразы, используя Perl.

Есть очень хороший онлайн-компрессор:

http://javascriptcompressor.com/

Вы также можете сжать переменные, если хотите еще больше сжатых.

Надеюсь, поможет

https://jawr.dev.java.net/ отлично подходит для минимизации и управления версиями

Другие вопросы по тегам