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

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

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

Кто-нибудь знает ситуацию в 2011 году?

Dan 31.01.2011 14:40

Сейчас 2012 год, и я думаю, что победителями стали UglifyJS и Closure, я использую UglifyJS, и он обычно выигрывает у всех остальных.

mkoistinen 04.04.2012 00:50

Я использую htmlcompressor.com/compressor.html для своего многостраничного приложения jQuery Mobile. Требуется файл HTML с

Anders 20.08.2012 19:39

Это 2017 год - что нового сейчас?

Abhinav Singi 01.06.2017 10:21

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

Jack Giffin 24.03.2020 02:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
173
5
112 696
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

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

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

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

Packer выглядит неплохо с точки зрения размера файла, но оказывается, что время, затрачиваемое на распаковку, обычно перевешивает выигрыш во времени при передаче файла меньшего размера по тубам. В большинстве реальных тестов браузера, которые я видел, он медленнее, чем необработанные несжатые файлы, обслуживаемые с помощью gzip, с точки зрения времени выполнения в браузере.

Colonel Sponsz 19.05.2010 18:46

Вот один тест: ericmmartin.com/comparison-of-javascript-compression-methods

Colonel Sponsz 19.05.2010 19:26

Вот онлайн-версия компрессора на тот случай, если вы не хотите иметь дело с запуском java: refresh-sf.com/yui

Bryan Legend 22.04.2011 01:40

Сценарии, сжатые с помощью упаковщика, не нужно распаковывать, если вы не отметите параметр кодирования Base62 (чего делать не следует, поскольку это gzip непрофессионала - я уверен, что большинство современных серверов поддерживают gzip). Нет смысла в gzip-архивировании файла с кодировкой base62, поскольку не остается избыточности, которую можно было бы использовать. Новейшая версия упаковщика (последняя версия) не содержит ошибок, не имеет накладных расходов на распаковку (пока вы не кодируете base62) и по-прежнему обеспечивает максимальное сжатие. Также появилась версия упаковщика для командной строки. Просто установите его с помощью npm следующим образом: npm install packer. (= D

Aadit M Shah 19.04.2012 19:17

JSMin - еще один.

Попробуйте JSMin, у вас есть порты C#, Java, C и другие, и они тоже доступны.

Был ли перенесен / удален порт C#?

Greg B 01.08.2011 16:08

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

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

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

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

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

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

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

Кстати, тесты проводились на коде jQuery.

  • Исходная библиотека jQuery 62,885 байт, 19758 байт после gzip
  • jQuery уменьшен с помощью JSMin 36 391 байт, 11541 байт после gzip
  • jQuery уменьшен с помощью Packer 21,557 байт, 11,119 байт после gzip
  • jQuery уменьшен с помощью YUI Compressor 31 822 байта, 10818 байтов после gzip

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

Packer имеет возможность выключить «кодирование base62» - и для jQuery он сжимает меньше, чем yui после gzip. Это связано с тем, что jquery использует eval и with, что не позволяет «безопасным» компрессорам выполнять определенные сжатия, но упаковщик их игнорирует. В целом небезопасно, но jQuery протестирован для Packer.

Daniel James 17.09.2008 11:19

Также попробуйте компрессорrater.thruhere.net, если вы мне не верите.

Daniel James 17.09.2008 11:22

Не забывайте обратную сторону пакера - время декомпрессии.

Nosredna 07.06.2009 19:57

будьте осторожны, закрытие Google иногда может быть худшим компрессором (вывод даже больше, чем исходный) - оно по умолчанию преобразует символы не-ascii в строках в литералы \uxxxx. --charset UTF-8 (если вы уверены, что каким-то образом сообщили об этом браузеру)

mykhal 15.02.2012 13:35

Вывод ClosureCompiler у меня не работает. jscompress.com работает

codenamezero 28.05.2013 22:59

Файлы сжатия YUI Compression больше, чем файлы сжатия Closure. Проверь это.

Alvaro 12.03.2015 11:57

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

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

Обновлено: Между прочим, «лучший» открыт для обсуждения, поскольку критерии «лучшего» будут варьироваться в зависимости от потребностей проекта. Лично я считаю, что ShrinkSafe - это хороший баланс; для некоторых людей, которые думают, что наименьший размер == лучший, этого будет недостаточно.

Обновлено: Стоит отметить, что компрессор YUI также использует Rhino.

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

Если вы используете 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 также выполняет следующие действия:

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

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

Мы используем uglify в приложении корпоративного класса. Он делает хорошую работу.

gyorgyabraham 14.03.2012 18:05

Не могли бы вы сравнить с jsmin на узле?

Gringo Suave 05.08.2012 04:43

недавно Uglify сбросил вызовы API

Gadelkareem 12.11.2012 20:05

@mishoo Эй, мне нравится ваш Uglify JS2. Моя сеть сейчас не работает нормально ... Я бы хотел использовать ее в Windows. Какое-то решение? : o)

Klaider 21.11.2015 13:07

@mishoo Я показываю ссылку git, но не понимаю, как ее использовать

Sachin Sarola 09.05.2019 14:20

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

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