Что вы используете для минимизации и сжатия библиотек JavaScript?

Что вы используете для минимизации и сжатия библиотек JavaScript?

Ответов (17)

Решение

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

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

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

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

Однако некоторые люди ругаются только компрессором YUI. Я лично не могу за это поручиться.

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

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

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

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

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

Я использую простой (3-4 строки) сценарий-оболочку для JavaScript :: Minifier :: XS .

Я тоже использую 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>

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

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

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

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

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

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

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

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

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

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

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

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

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

UglifyJS - новый.

UglifyJS сжимает лучше, чем YUI Compressor, и примерно на одном уровне с Google Closure Compiler. Например, сжатая версия jQuery из Google Closure Compiler всего на 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 с их надстройкой.

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

Вот решение от 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, будут минимизированы (см. Атрибут «Исключить», чтобы исключить другие файлы из минимизации).

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

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

http://javascriptcompressor.com/

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

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