Вопрос

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

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

Решение

Я недавно выпустил UglifyJS, компрессор JavaScript, написанный на JavaScript (работает на NodeJS Node.js платформе, но ее можно легко модифицировать для работы на любом движке JavaScript, поскольку она не требует каких-либо Node.js внутренние органы).Это намного быстрее, чем оба ЮИ Компрессор и Закрытие Google, он сжимается лучше, чем ЮИ во всех сценариях, на которых я его тестировал, и это безопаснее, чем Closure (знает, что нужно делать с «eval» или «with»).

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

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

ПС:О, это тоже может «украсить».;-)

Другие советы

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

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

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

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

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

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

Кстати, тесты проводились на коде 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

@Дэниел Джеймс упоминает в комментарии компрессор это показывает, что Пакер лидирует в таблице по лучшему сжатию, так что, думаю, ymmv

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

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

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

Примечание:Хотя Дин Эдвардс /упаковщик/ обеспечивает лучшую степень сжатия, чем YUI Compressor, при его использовании я столкнулся с несколькими ошибками JavaScript.

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

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

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

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

Пытаться JSMin, имеет C#, Java, C и другие порты и также легко доступен.

Если вы используете Packer, просто выберите опцию «Сжать переменные» и заархивируйте полученный код.Опция base62 предназначена только в том случае, если ваш сервер не может отправлять файлы в формате gzip.Упаковщик с «shrink vars» обеспечивает лучшее сжатие YUI, но может привести к ошибкам, если вы где-то пропустили точку с запятой.

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

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

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

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

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

Bananascript.com раньше давал мне лучшие результаты.

КДЖСкомпресс

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

KJSCompress/CSSKOMPRESS набор из двух приложений (KJScompress A CSSCompress) для удаления незначительных пробелов и комментариев из файлов, содержащих JavaScript и CSS.Оба являются приложениями командной строки для операционной системы GNU/Linux.

Джс Давка — хороший компрессор, который можно использовать после минимизации.

я использую jscompressor.com как приложение Chrome.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top