Лучший JavaScript-компрессор [закрыто]

171

Какой лучший компрессор JavaScript доступен? Я ищу инструмент, который:

  • прост в использовании
  • имеет высокую степень сжатия
  • Производить надежные конечные результаты (не портит код)
Рон Харлев
источник
14
Кто-нибудь знает ситуацию в 2011 году?
Дан
4
Сейчас 2012 год, и я думаю, что UglifyJS и Closure - победители, я использую UglifyJS, и это обычно бьет все остальное.
mkoistinen
Я использую htmlcompressor.com/compressor.html для своего многостраничного приложения jQuery Mobile. Он принимает файл HTML с тегами <script> и сжимает HTML, JavaScript и CSS. Работает как шарм.
Андерс
Это 2017 год - что нового сейчас?
Абхинав
Сейчас 2020 год. С «безопасной» конфигурацией по умолчанию UglifyJS незначительно выигрывает, потому что она более «безопасна». Для продвинутого использования энергии, Closure Compiler вручает задницу UglifyJS себе. Закрывающий компилятор с ADVANCDED_OPTIMIZATIONS может выполнять все виды трюков, которые помогут вам оптимизировать рабочий процесс и код одновременно. См. Stackoverflow.com/a/50355530/5601591 для примеров удивительности компилятора Closure (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я не мог найти подходящий пост в другом месте, поэтому я должен был отослать вас к сообщению, которое я написал).
Джек Гиффин

Ответы:

149

Недавно я выпустил UglifyJS , компрессор JavaScript, написанный на JavaScript (работает на платформе NodeJS Node.js , но его можно легко модифицировать для работы на любом движке JavaScript, поскольку он не требует никаких Node.jsвнутренних компонентов ). Он намного быстрее, чем YUI Compressor и Google Closure , он сжимает лучше, чем YUI во всех скриптах, на которых я его тестировал, и безопаснее, чем Closure (знает, что делать с «eval» или «with»).

Помимо удаления пробелов, UglifyJS также делает следующее:

  • изменяет имена локальных переменных (обычно на одиночные символы)
  • присоединяется к последовательным объявлениям var
  • избегает вставки ненужных скобок, скобок и точек с запятой
  • оптимизирует IF (удаляет «else», когда обнаруживает, что он не нужен, преобразует IF в операторы &&, || или? /:: когда это возможно и т. д.).
  • превращается foo["bar"]в foo.barгде это возможно
  • по возможности удаляет кавычки из ключей в литералах объекта
  • разрешает простые выражения, когда это приводит к уменьшению кода (1 + 3 * 4 ==> 13)

PS: О, это тоже может "украсить". ;-)

Mishoo
источник
17
Мы используем uglify в приложениях корпоративного класса. Это делает хорошую работу.
gyorgyabraham
Не могли бы вы сравнить с jsmin на узле?
Gringo Suave
Недавно Uglify отбросил вызовы API
Гаделкарем
@mishoo Эй, я люблю твой Uglify JS2. Моя сеть не работает нормально в эти дни ... Я хотел бы использовать ее в Windows. Какое-то решение? : o)
Hydroper
@mishoo Я показываю git ссылку, но не понимаю, как ее использовать
Sachin
124

Возвращаясь к этому вопросу несколько лет спустя, UglifyJS , кажется, лучший вариант на данный момент.

Как указано ниже, он работает на платформе NodeJS, но может быть легко изменен для работы на любом движке JavaScript.

--- Старый ответ ниже ---

Google выпустил Closure Compiler, который, кажется, генерирует самые маленькие файлы, если смотреть здесь и здесь

До этого различные варианты были следующие

По сути, Packer лучше справляется с первоначальным сжатием, но если вы собираетесь сжать файлы перед отправкой по сети (что и следует делать), YUI Compressor получает наименьший конечный размер.

Тесты были выполнены на коде jQuery.

  • Исходная библиотека jQuery 62 885 байт, 19 758 байт после gzip
  • JQuery минимизируется с помощью JSMin 36 391 байт, 11 541 байт после gzip
  • jQuery минимизируется с помощью Packer 21,557 байт, 11,119 байт после gzip
  • jQuery минимизируется с помощью YUI Compressor 31 822 байта, 10 818 байтов после gzip

@ daniel james упоминает в комментариях compressrater, который показывает, что Пакер возглавляет диаграмму в лучшем сжатии, так что я думаю, ymmv

похлопывание
источник
У Packer есть опция выключения 'base62 encode' - и для jQuery он сжимает меньше, чем yui после gzip. Это связано с тем, что jquery использует «eval» и «with», что не позволяет «безопасным» компрессорам выполнять определенные сжатия, но упаковщик их игнорирует. В целом небезопасно, но jQuery тестируется для Packer.
Даниэль Джеймс
Кроме того, попробуйте compressorrater.thruhere.net, если вы мне не верите.
Дэниел Джеймс
9
Не забудьте обратную сторону упаковщика - время декомпрессии.
Носредна
1
обратите внимание, закрытие Google иногда может быть худшим компрессором (вывод даже больше, чем оригинал) - он \uxxxxпо умолчанию преобразует не-ascii символы в строках в литералы .. используйте например --charset UTF-8(если вы уверены, что браузер как-то об этом узнал)
Михал
Вывод ClosureCompiler не работает для меня. jscompress.com работает
codenamezero
43

Компрессор YUI - это путь. Он имеет высокую степень сжатия, хорошо протестирован и используется на многих топовых сайтах, и, лично я рекомендую.

Я использовал его для своих проектов без единой ошибки JavaScript или сбоя. И у него есть хорошая документация.

Я никогда не использовал его возможности сжатия CSS, но они также существуют. Сжатие CSS работает так же хорошо.

Примечание. Несмотря на то, что / packer / в Dean Edwards обеспечивает более высокую степень сжатия, чем YUI Compressor, при его использовании я столкнулся с несколькими ошибками JavaScript.

kamens
источник
5
Упаковщик выглядит хорошо с точки зрения размера файла, но оказывается, что время, потраченное на распаковку, обычно превышает выигрыш времени на передачу файла меньшего размера через трубки. У большинства реальных тестов браузера, которые я видел, он работает медленнее, чем необработанные несжатые файлы, обслуживаемые gzip с точки зрения времени выполнения в браузере.
полковник Спонсз
Вот один тест: ericmmartin.com/comparison-of-javascript-compression-methods
полковник Спонс
Вот онлайн-версия компрессора на тот случай, если вы не хотите иметь дело с запуском java: refresh-sf.com/yui
Bryan Legend
Скрипты, сжатые с помощью упаковщика, не нужно распаковывать, если вы не проверите опцию кодирования Base62 (что делать не следует, поскольку это gzip для неспециалистов - я уверен, что большинство современных серверов поддерживают gzip). Нет никакого смысла в сжатии зашифрованного файла base62, так как не осталось избыточности для использования. Последняя версия упаковщика (финальная версия) не содержит ошибок, не имеет накладных расходов на распаковку (если вы не кодируете base62) и все еще достигает наибольшего сжатия. Также теперь есть версия упаковщика для командной строки. Просто установите его , используя НПМ следующим образом : npm install packer. (= D
Адит М Шах
8

Я использую ShrinkSafe из проекта Dojo - он является исключительным, поскольку он фактически использует интерпретатор JavaScript ( Rhino ) для поиска символов в коде, понимания их области действия и т. Д., Что помогает гарантировать, что код будет работать, когда он выйдет другой конец, в отличие от многих инструментов сжатия, которые используют регулярные выражения, чтобы сделать то же самое (что не так надежно).

На самом деле у меня есть задача MSBuild в проекте веб-развертывания в моем текущем решении Visual Studio, которое запускает сценарий, который, в свою очередь, запускает все файлы JS решения через ShrinkSafe перед развертыванием, и это работает довольно хорошо.

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

РЕДАКТИРОВАТЬ: Стоит отметить, что компрессор YUI также использует Rhino.

Джейсон Бантинг
источник
5

Попробуйте JSMin , получили C #, Java, C и другие порты и тоже легко доступны.

chakrit
источник
Порт C # был перемещен / удален?
Грег Б
4

Если вы используете Packer, просто перейдите к опции 'shrink variable' и скопируйте полученный код. Опция base62 доступна только в том случае, если ваш сервер не может отправлять сжатые файлы. Упаковщик с 'shrink vars' обеспечивает лучшее сжатие YUI, но может привести к ошибкам, если вы пропустили точку с запятой.

base62 - это, по сути, gzip для бедного человека, поэтому сжатый код base62-ed дает вам файлы большего размера, чем сжатый код shrink-var-ed.

jcoglan
источник
1

Вот сценарий сжатия YUI ( Byuic ), который находит все js и css по пути и сжимает / (опционально) запутывает их. Приятно интегрироваться в процесс сборки.

jimg
источник
1

KJScompress

http://opensource.seznam.cz/KJScompress/index.html

Kjscompress / csskompress представляет собой набор из двух приложений (kjscompress a csscompress) для удаления незначительных пробелов и комментариев из файлов, содержащих JavaScript и CSS. Оба являются приложениями командной строки для операционной системы GNU / Linux.

MicTech
источник
1

Js Crush - хороший компрессор для использования после того, как вы уменьшите его.

Alex
источник