Что вы используете для минимизации и сжатия библиотек JavaScript? [закрытый]
Что вы используете для минимизации и сжатия JavaScript-библиотек?
17 ответов
Я использовал Юи компрессора в течение длительного времени и не имели никаких проблем с ним, но в последнее время начали использовать Компилятор Закрытия Google и имел некоторый успех с ним. Мои впечатления от него до сих пор:
- он обычно превосходит компрессор YUI с точки зрения уменьшения размера файла. На небольшое количество в простом режиме и на много в расширенном режиме.
- простой режим до сих пор был таким же надежным, как компрессор YUI. Ничего я кормила его показаны какие-либо проблемы.
- расширенный режим "компиляции" отлично подходит для некоторых скриптов, но резкое уменьшение размера вашего скрипта происходит за счет большого вмешательства в ваш код, который имеет приличный шанс его сломать. Есть способы решения некоторых из этих проблем и понимание того, что он делает, может пройти долгий путь, чтобы избежать проблем, но я обычно избегаю использовать этот режим.
я перешел к использованию компилятора закрытия Google в простой режим "компиляции", потому что он немного превосходит компрессор YUI в целом. Я использовал его значительно меньше, чем у меня есть компрессор YUI, но из того, что я видел до сих пор, я бы рекомендовал его.
еще один, который я еще не пробовал, но звучит многообещающе, это Михай Базон по UglifyJS.
У вас есть стадо здесь:
- на Юи компрессора уже упоминалось в других ответов,
- на Компилятор Закрытия Google,
- на Dojo ToolKitShrinkSafe компилятор, используемый их построить система,
- Дуглас Крокфордпо-прежнему актуально помощью jsmin,
- UglifyJS упомянул другие
- и коммерческое решение, javaScript Obfuscator (никогда не пользовался лично)
по моему личному опыту, я бы рекомендовал вам использовать Dojo SDK для создания пользовательской сборки, которую вы можете, в свою очередь, настроить для использования их обычного компилятора ShrinkSafe или закрытия Google,которые они теперь поддерживают также.
с точки зрения сжатия, я думаю, что закрытие Google-это лучший результат для меня, поэтому далеко, однако я обычно доволен ShrinkSafe, и он немного старше и надежнее, в то время как компилятор закрытия выглядит немного новым ребенком на блоке (который ваши заинтересованные стороны, возможно, не слишком любят, например).
некоторые люди ругаются только компрессором YUI. Лично я не могу поручиться за это.
теперь, если вы вопрос обжать библиотеки и не только свой собственный код JavaScript, он, очевидно, становится сложнее, как вы для большинства этих инструментов потребуется экспортировать символы, которые не следует переименовывать или удалять. Большинство приличных компрессоров удалят функции, которые, по их мнению, не используются - часто в библиотеке, если не связаны с проектом, очевидно, - и изменят имена, чтобы сделать их короче и использовать меньше символов - также проблема, поскольку вы, очевидно, хотите, чтобы публичный API не был изменен.
вы также можете найти другие темы по этой теме и найти информацию в поддержке инструментов документация. Вы также можете посмотреть JSBuilder2, какой-то кулон для инструмента сборки Dojo (так, используя Shrinksafe или компилятор закрытия) для ExtJS (с помощью компрессора YUI).
(извините, будучи новым пользователем SO, я не могу добавить более одной ссылки, поэтому я не могу напрямую ссылаться на инструменты.)
EDIT: что касается проблем, выраженных в некоторых ответах, что сжатие может привести к ошибкам и что это упрощает отладку, поскольку код не искажен: да, это серьезная проблема. Однако:
- вы получите очень значительное улучшение с точки зрения пропускной способности, если вы используете минификатор, даже при активированном сжатии gzip (и вы можете научиться использовать сжатие gzip, облегчая жизнь компрессора
- вы должны просто попробовать свой код в режиме отладки и производства, чтобы убедиться, что поведение идентично. В смысле, это тоже часть твоей работы...
- некоторые из этих компрессоров вокруг для a время и не привести к ошибкам в коде. На самом деле они просто перестраивают вещи и заменяют струны.
- некоторые компрессоры (например, система сборки dojo) поставляются с опциями, позволяющими производить как сжатый, так и несжатый вывод, так что вы можете включить различные режимы для отладки и производства, используя, например, параметры запроса.
Я вообще не минимизирую JavaScript: сжатие gzip достаточно хорошо для меня и имеет дополнительное преимущество, что сообщения об ошибках все равно будут полезны.
Я тоже использую компрессор YUI. У меня есть такая задача ant, которую я использую в своих проектах:
<!--
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 Компрессор и как раз о наравне с компилятор закрытия Google. Для пример, сжатая версия jQuery из закрытия Google Компилятор только на 403 байта меньше чем версия производства UglifyJS - впечатляет! UglifyJS также является самым быстрым, чтобы запустить дальний выстрел, избиение Закрытие более чем на 6 секунд!
дополнительно, код, созданный с от UglifyJS безопаснее, чем код, который Закрытие порождает. Например, Закрытие не знает, как справиться с eval или С {} - он просто регистрирует ошибку и продолжает переименовывать переменные в любом случае. Это, очевидно, приводит к сломанный код. UglifyJS не имеет эта проблема.
более подробную информацию можно найти здесь: http://badassjs.com/post/971960912/uglifyjs-a-fast-new-javascript-compressor-for-node-js
Google закрытие инструменты
вы можете сопоставить уменьшенную версию с обычным исходным кодом для отладки в Firebug с их надстройкой.
Я пробовал компрессор YUI раньше, но он дает мне сообщение об ошибке.
Я предлагаю использовать JSMIN для минимизации вашего javascript:
вот решение от Microsoft, которое можно интегрировать в Visual Studio для автоматического минимизации файлов при создании проекта.
Установка:
загрузите msi из : http://aspnet.codeplex.com/releases/view/40584
вам может потребоваться перезагрузить компьютер после его завершения.
Использование:
редактировать .csproj файл и включить следующее В конце файл (но перед </Project>
tag):
<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 файлы, которые не заканчиваются .минута.js,.минута.css будет минимизирован (см. атрибут" Exclude", чтобы исключить другие файлы из минимизации).
http://code.google.com/p/jsmin-php/
старый добрый Дуг Крокфорд: -) красота в том, что с помощью управления кэшем вы можете получить автоматическое сжатие только тогда, когда это необходимо. Или в одном из моих проектов я просто выводил сжатые/gzipped-файлы и удалял их при внесении изменений. Для среды разработки я просто не называю сценарий минификации.
Я использую простой (3-4 строки) скрипт-обертку вокруг JavaScript:: Minifier:: XS.
вот статья в которой описано как использовать компрессор Yui для минимизации файлов во время монтажа: сжатие JS-файлов в рамках процесса сборки
Я использую JavaScript::Minifier perl. Он работает довольно хорошо, и вы можете, например, заменить некоторые фразы с помощью perl.
есть очень хороший онлайн компрессор:
http://javascriptcompressor.com/
вы также можете сжимать переменные, если хотите еще больше сжимать.
надеюсь, это поможет