Найкращий компресор JavaScript [закрито]


171

Який найкращий доступний компресор JavaScript? Я шукаю інструмент, який:

  • проста у використанні
  • має високу швидкість стиснення
  • Отримайте надійні кінцеві результати (не зіпсуйте код)

14
Хтось знає ситуацію в 2011 році?
День

4
Зараз 2012 рік, і я думаю, що UglifyJS та Closure - переможці, я використовую UglifyJS, і він зазвичай відбиває штани від усього іншого.
mkoistinen

Я використовую htmlcompressor.com/compressor.html для свого багатосторінкового додатка jQuery Mobile. Він займає HTML-файл із тегами <script> і стискає HTML, JavaScript та CSS. Працює як шарм.
Андерс

Настав 2017 рік - що найновіше зараз?
Abhinav Singi

Це 2020 рік. З конфігурацією "безпечної" за замовчуванням UglifyJS незначно виграє, оскільки є "безпечнішою". Для розширеного використання енергії компілятор закриття передає собі попку UglifyJS. Компілятор закриття з ADVANCDED_OPTIMIZATIONS може робити всілякі хитрощі, які допоможуть вам оптимізувати робочий процес та код одночасно. Дивіться stackoverflow.com/a/50355530/5601591 для прикладів дивовижності компілятора закриття (ВІДМОВА: Я не міг знайти підходящу публікацію в блозі в іншому місці, тому мені довелося направити вас на написане мною повідомлення).
Джек Гіффін

Відповіді:


149

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

Крім видалення пробілів, UglifyJS також виконує наступні дії:

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

PS: О, це також може "прикрасити". ;-)


17
Ми використовуємо uglify у додатку для корпоративного класу. Це добре справляється.
gyorgyabraham

Не могли б ви порівняти з jsmin на вузлі?
Gringo Suave

нещодавно Uglify відмовився від викликів API
Gadelkareem

@mishoo Ей, я люблю ваш Uglify JS2. Моя мережа не працює нормально в наші дні ... Я хотів би використовувати її в Windows. Якесь рішення? : o)
Hydroper

@mishoo Я показую git-посилання, але не розумію, як ним користуватися
Sachin Sarola

124

Перегляд цього питання через кілька років UglifyJS , здається, є найкращим варіантом на даний момент.

Як зазначено нижче, він працює на платформі NodeJS, але його можна легко модифікувати для роботи в будь-якому двигуні JavaScript.

--- Стара відповідь нижче ---

Google випустив компілятор закриття, який, здається, генерує найменші файли на сьогоднішній день, як це можна побачити тут і тут

До цього різні варіанти були наступними

В основному Packer виконує кращу роботу при початковому стисненні, але якщо ви збираєтеся збирати файли перед тим, як надсилати по дроту (що вам слід робити) YUI Compressor отримує найменший кінцевий розмір.

Тести проводились на jQuery код btw.

  • Оригінальна бібліотека jQuery 62,885 байт, 19,758 байт після gzip
  • jQuery поповнився JSMin 36 391 байт, 11 531 байт після gzip
  • jQuery поповнився з Packer 21557 байт, 11,119 байт після gzip
  • jQuery поповнився компресором YUI 31 822 байт, 10 818 байт після gzip

@ Даніель Джеймс згадує в коментарі компресора, який показує, що Пакер лідирує в діаграмі з найкращим стисненням, тому я думаю, ymmv


У Packer є можливість вимкнути 'base62 кодування' - а для jQuery він стискає менше, ніж yui після gzip. Це тому, що jquery використовує 'eval' і 'with', що не дозволяє безпечним компресорам робити певні компресії, але пакувач ігнорує їх. Загалом це не безпечно, але jQuery перевірено на Packer.
Даніель Джеймс

Також спробуйте compressorrater.thruhere.net, якщо ви мені не вірите.
Даніель Джеймс

9
Не забувайте про недолік часу пакування - час декомпресії.
Nosredna

1
стежити, Google закриття може іноді бути гіршим компресора (вихід навіть більше , ніж оригінал) - він перетворити не-ASCII символів в рядках в \uxxxxлитералов за замовчуванням .. використовувати , наприклад , --charset UTF-8(якщо ви впевнені , що ви дозволяєте ноу - браузер про це як - то)
mykhal

Вихід ClosureCompiler для мене не працює. jscompress.com працює
codenamezero

43

Компресор YUI - це шлях. Він має високу швидкість стиснення, добре перевірений і використовується у багатьох топ-сайтах, і, особисто, мені його рекомендують.

Я використовував його для своїх проектів без жодної помилки JavaScript або ікони. І це приємна документація.

Я ніколи не використовував його можливості стиснення CSS, але вони також існують. Стиснення CSS працює так само добре.

Примітка. Хоча Дік Едвардс / пакувальник / досягає кращого рівня стиснення, ніж YUI Compressor, я зіткнувся з декількома помилками JavaScript при його використанні.


5
Пакер добре виглядає з точки зору розміру файлу, але виявляється, що час, який витрачається на розпакування, зазвичай перевищує приріст часу для перенесення меншого файлу через трубочки. Більшість фактичних орієнтирів браузера, які я бачив, мають повільніше, ніж сирі нестиснені файли, що подаються з gzip за часом виконання у браузері.
Полковник Спонш


Ось онлайн-версія компресора, якщо ви не хочете мати справу з запуском 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, перш ніж ми розгорнемо, і це працює досить добре.

EDIT: До речі, "кращий" є відкритим для дебатів, оскільки критерії "найкращого" будуть змінюватися залежно від потреб проекту. Особисто я вважаю, що ShrinkSafe - це хороший баланс; для деяких людей, які вважають найменший розмір == найкращим, він буде недостатнім.

EDIT: Варто зазначити, що компресор YUI також використовує Rhino.



4

Якщо ви використовуєте Packer, просто перейдіть далеко до опції "зменшення змінних" і gzip отриманий код. Параметр base62 призначений лише для того, якщо ваш сервер не може надсилати gzipped файли. Пакувальник з "стисненням вар" досягає кращого стиснення YUI, але може вводити помилки, якщо ви десь пропустили крапку з комою.

base62 - це в основному gzip для бідних людей, саме тому gzipping code base62-ed дає вам більші файли, ніж gzipping shrink-var-ed-код.





1

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



1

KJScompress

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

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.