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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Компрессор YUI - это то, что вам нужно. У него отличная степень сжатия, он хорошо протестирован и используется на многих популярных сайтах и, в общем, лично мной рекомендован.
Я использовал его для своих проектов без единой ошибки JavaScript или сбоев. И у него хорошая документация.
Я никогда не использовал его возможности сжатия CSS, но они тоже существуют. Сжатие CSS работает точно так же.
Примечание. Хотя / упаковщик / Дина Эдвардса обеспечивает лучшую степень сжатия, чем YUI Compressor, я столкнулся с несколькими ошибками JavaScript при его использовании.
Packer выглядит неплохо с точки зрения размера файла, но оказывается, что время, затрачиваемое на распаковку, обычно перевешивает выигрыш во времени при передаче файла меньшего размера по тубам. В большинстве реальных тестов браузера, которые я видел, он медленнее, чем необработанные несжатые файлы, обслуживаемые с помощью gzip, с точки зрения времени выполнения в браузере.
Вот один тест: ericmmartin.com/comparison-of-javascript-compression-methods
Вот онлайн-версия компрессора на тот случай, если вы не хотите иметь дело с запуском java: refresh-sf.com/yui
Сценарии, сжатые с помощью упаковщика, не нужно распаковывать, если вы не отметите параметр кодирования Base62 (чего делать не следует, поскольку это gzip непрофессионала - я уверен, что большинство современных серверов поддерживают gzip). Нет смысла в gzip-архивировании файла с кодировкой base62, поскольку не остается избыточности, которую можно было бы использовать. Новейшая версия упаковщика (последняя версия) не содержит ошибок, не имеет накладных расходов на распаковку (пока вы не кодируете base62) и по-прежнему обеспечивает максимальное сжатие. Также появилась версия упаковщика для командной строки. Просто установите его с помощью npm следующим образом: npm install packer. (= D
JSMin - еще один.
Попробуйте JSMin, у вас есть порты C#, Java, C и другие, и они тоже доступны.
Был ли перенесен / удален порт C#?
Вот исходный код HttpHandler, который это делает, возможно, это поможет вам
Возвращаясь к этому вопросу несколько лет спустя, UglifyJS, кажется, сейчас лучший вариант.
Как указано ниже, он работает на платформе NodeJS, но может быть легко модифицирован для работы на любом движке JavaScript.
--- Старый ответ ниже ---
Google выпустил Компилятор закрытия, который, кажется, генерирует самые маленькие файлы, насколько это видно здесь и здесь.
До этого различные опции были следующие
По сути, Упаковщик лучше справляется с начальным сжатием, но если вы собираетесь сжать файлы перед отправкой по сети (что вы должны делать), Компрессор YUI получит наименьший конечный размер.
Кстати, тесты проводились на коде jQuery.
@ Дэниел Джеймс упоминает в комментарии компрессор, который показывает, что Пакер лидирует в диаграмме с наилучшим сжатием, поэтому я предполагаю, что ymmv
Packer имеет возможность выключить «кодирование base62» - и для jQuery он сжимает меньше, чем yui после gzip. Это связано с тем, что jquery использует eval и with, что не позволяет «безопасным» компрессорам выполнять определенные сжатия, но упаковщик их игнорирует. В целом небезопасно, но jQuery протестирован для Packer.
Также попробуйте компрессорrater.thruhere.net, если вы мне не верите.
Не забывайте обратную сторону пакера - время декомпрессии.
будьте осторожны, закрытие Google иногда может быть худшим компрессором (вывод даже больше, чем исходный) - оно по умолчанию преобразует символы не-ascii в строках в литералы \uxxxx. --charset UTF-8 (если вы уверены, что каким-то образом сообщили об этом браузеру)
Вывод ClosureCompiler у меня не работает. jscompress.com работает
Файлы сжатия YUI Compression больше, чем файлы сжатия Closure. Проверь это.
Я использую ShrinkSafe из проекта Dojo - это исключение, потому что на самом деле он использует интерпретатор JavaScript (Носорог) для поиска символов в коде и понимания их объема и т. д., Что помогает гарантировать, что код будет работать, когда он выходит на другой конец, поскольку в отличие от множества инструментов сжатия, которые используют регулярное выражение для того же (что не так надежно).
На самом деле у меня есть задача MSBuild в Проект веб-развертывания в моем текущем решении Visual Studio, которое запускает сценарий, который, в свою очередь, запускает все файлы JS решения через ShrinkSafe перед развертыванием, и он работает довольно хорошо.
Обновлено: Между прочим, «лучший» открыт для обсуждения, поскольку критерии «лучшего» будут варьироваться в зависимости от потребностей проекта. Лично я считаю, что ShrinkSafe - это хороший баланс; для некоторых людей, которые думают, что наименьший размер == лучший, этого будет недостаточно.
Обновлено: Стоит отметить, что компрессор YUI также использует Rhino.
Если вы используете Packer, просто выберите параметр «сжать переменные» и заархивируйте полученный код. Параметр base62 предназначен только для случаев, когда ваш сервер не может отправлять сжатые файлы. Packer с 'shrink vars' обеспечивает лучшее сжатие YUI, но может внести ошибки, если вы где-то пропустили точку с запятой.
base62 - это, по сути, gzip для бедняков, поэтому gzip код base62-ed дает вам файлы большего размера, чем gzip-shrink-var-ed код.
bananascript.com давал мне лучшие результаты.
KJScompress
http://opensource.seznam.cz/KJScompress/index.html
Kjscompress/csskompress is set of two applications (kjscompress a csscompress) to remove non-significant whitespaces and comments from files containing JavaScript and CSS. Both are command-line applications for GNU/Linux operating system.
In searching silver bullet, found this question. For Ruby on Rails http://github.com/sstephenson/sprockets
Недавно я выпустил UglifyJS, компрессор JavaScript, написанный на JavaScript (работает на платформе NodeJS Node.js, но его можно легко изменить для работы на любом движке JavaScript, поскольку он не требует никаких внутренних компонентов Node.js). Он намного быстрее, чем Компрессор YUI и Закрытие Google, он сжимает лучше, чем Юй во всех скриптах, на которых я его тестировал, и он безопаснее, чем Closure (знает, что делать с eval или with).
Помимо удаления пробелов, UglifyJS также выполняет следующие действия:
foo["bar"] в foo.bar, где это возможноPS: О, это тоже может «украсить». ;-)
Мы используем uglify в приложении корпоративного класса. Он делает хорошую работу.
Не могли бы вы сравнить с jsmin на узле?
недавно Uglify сбросил вызовы API
@mishoo Эй, мне нравится ваш Uglify JS2. Моя сеть сейчас не работает нормально ... Я бы хотел использовать ее в Windows. Какое-то решение? : o)
@mishoo Я показываю ссылку git, но не понимаю, как ее использовать
Js Crush - хороший компрессор для использования после минификации.
Кто-нибудь знает ситуацию в 2011 году?