Лучший JavaScript-компрессор

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

  • прост в использовании
  • имеет высокую степень сжатия
  • Производить надежные конечные результаты (не портит код)

14 ответов

Решение

Недавно я выпустил 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: О, это тоже может "украсить".;-)

Возвращаясь к этому вопросу несколько лет спустя, 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

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

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

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

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

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

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

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

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

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

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

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

JSMin это еще один.

В поисках серебряной пули нашел этот вопрос. Для Ruby on Rails http://github.com/sstephenson/sprockets

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

Js Crush - хороший компрессор для использования после минимизации.

Вот исходный код HttpHandler, который делает это, может быть, это поможет вам

KJScompress

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

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

http://www.bananascript.com/ давал мне лучшие результаты.

Я использую http://www.jscompressor.com/ в качестве приложения Chrome.

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