Минификация (программирование) - Minification (programming)

Минификация (также минимизация или же минимизация) - это процесс удаления всех ненужных символов из исходный код из интерпретируемые языки программирования или же языки разметки без изменения его функциональности. Эти ненужные символы обычно включают символы пробела, символы новой строки, Комментарии, и иногда разделители блоков, которые используются для повышения удобочитаемости кода, но не требуются для его выполнения. Минификация уменьшает размер исходного кода, делая его передачу по сети (например, Интернет) более эффективной. В культуре программистов стремление к максимально миниатюрному исходному коду является целью развлекательного код гольф соревнования.

Минификацию можно отличить от более общей концепции Сжатие данных в том, что минифицированный источник может быть интерпретирован немедленно, без необходимости выполнения шага распаковки: один и тот же интерпретатор может работать как с оригинальным, так и с минифицированным источником.

Цели минификации не совпадают с целями обфускация; первое часто предполагается изменить, используя хорошенький принтер[нужна цитата ] или уничтожитель. Однако для достижения своих целей минификация иногда использует методы, также используемые обфускация; например, сокращение имен переменных и рефакторинг исходный код. Когда минификация использует такие методы, хорошенький принтер или unminifier может полностью отменить процесс минификации только в том случае, если ему предоставлены подробные сведения о преобразованиях, выполняемых такими методами. Если эти данные не предоставлены, обратный исходный код будет содержать разные имена переменных и поток управления, даже если он будет иметь ту же функциональность, что и исходный исходный код.

Пример

Например, JavaScript код

// Это комментарий, который будет удален минификаторомвар множество = [];за (вар я = 0; я < 20; я++) {  множество[я] = я;}

эквивалентно, но длиннее, чем

за(вар а=[я=0];я<20;а[я]=я++);

История

В 2001 Дуглас Крокфорд представил JSMin,[1] который удалил комментарии и пробелы из кода JavaScript.[2] В 2007 году за ним последовал YUI Compressor.[2] В 2009 году Google представил свой набор инструментов Closure, в том числе Closure Compiler, который содержал функцию сопоставления источников вместе с расширением Firefox под названием Closure Inspector.[3] В 2010 году Михай Базон представил UglifyJS, который был заменен UglifyJS2 в 2012 году; Переписывание должно было позволить поддержку исходной карты.[4] С 2017 года Алекс Лам взял на себя обслуживание и разработку UglifyJS2, заменив его на UglifyJS3, который объединил интерфейс командной строки с API.[5]

Сопоставление источников

А Исходная карта является формат файла что позволяет программным инструментам для JavaScript для отображения пользователю кода, отличного от кода, фактически выполняемого компьютером. Например, чтобы помочь в отладка минифицированного кода путем «сопоставления» этого кода с исходным неминифицированным исходный код вместо.

Исходный формат был создан Джозефом Шорром в рамках проекта минификации Closure Inspector.[6] Версия 2 и 3 формата значительно уменьшили размер файлов карты.[6]

Типы

Инструменты

Код Visual Studio поставляется с поддержкой минификации для нескольких языков. Он может легко просматривать Visual Studio Marketplace, чтобы загрузить и установить дополнительные минификаторы.

Оптимизаторы JavaScript, которые могут минимизировать и генерировать исходные карты, включают UglifyJS и Компилятор Google Closure. Кроме того, некоторые онлайн-инструменты, такие как Microsoft Ajax Minifier,[7] то Yahoo! Юй Компрессор или Pretty Diff,[8] может сжать CSS файлы.[нужна цитата ] Для минификации HTML-кода есть следующие инструменты: HtmlCompressor,[9] HTMLMinifier[10] и WebMarkupMin.[11] Существует сценарий Power-Shell с именем minifyPS.[12] который может сжимать код сценария PowerShell, а также код JavaScript.

Веб-разработка

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

JavaScript и Каскадная таблица стилей (CSS) ресурсы можно минимизировать, сохраняя их поведение при значительном уменьшении размера файла. Библиотеки, доступные в Интернете, могут в разной степени минифицироваться и оптимизироваться. Некоторые библиотеки также объединяют несколько файлов сценариев в один файл для загрузки клиентом. Исходные карты JavaScript могут сделать код доступным для чтения и отладки даже после того, как он был объединен и уменьшен.[13]

Рекомендации

  1. ^ Крокфорд, Дуглас (11 сентября 2001 г.). «JSMin: минификатор JavaScript». Crockford.com. Самостоятельно опубликованный.
  2. ^ а б «Минификация кода». webplatform.github.io. Проект WebPlatform. В архиве из оригинала от 24 апреля 2016 г.
  3. ^ Пол, Райан (6 ноября 2009 г.). «Google открывает для всех свой набор инструментов для разработки JavaScript». Ars Technica. Condé Nast.
  4. ^ Базон, Михай (8 ноября 2012 г.). "Стоит ли переходить на UglifyJS2?". lisperator.net. Самостоятельно опубликованный.
  5. ^ "uglify-js NPM". npmjs.com.
  6. ^ а б «Предложение по редакции 3 исходной карты». 11 января 2011. Архивировано с оригинал 26 ноября 2014 г.. Получено 16 апреля 2016.
  7. ^ Microsoft Ajax Minifier. Ajaxmin.codeplex.com (13 сентября 2012 г.).
  8. ^ Pretty Diff. Pretty Diff.
  9. ^ HtmlCompressor. code.google.com/archive/p/htmlcompressor (11 февраля 2017 г.).
  10. ^ HTMLMinifier. github.com/kangax/html-minifier (11 февраля 2017 г.).
  11. ^ WebMarkupMin. github.com/Taritsyn/WebMarkupMin (11 февраля 2017 г.).
  12. ^ minifyPS. Minifyps.codeplex.com (22 февраля 2012 г.).
  13. ^ http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/