Минификация (программирование)
Минификация (также минимизация или минимизация ) — это процесс удаления всех ненужных символов из исходного кода интерпретируемых языков программирования или языков разметки без изменения его функциональности. Эти ненужные символы обычно включают в себя пробелы , символы новой строки , комментарии и иногда разделители блоков , которые используются для повышения читаемости кода, но не требуются для его выполнения. Минимизация уменьшает размер исходного кода, делая его передачу по сети (например, Интернет) более эффективной. В культуре программистов стремление к предельно минимизированному исходному коду является целью развлекательных соревнований по гольфу с кодом .
Минификацию можно отличить от более общей концепции сжатия данных тем, что минифицированный источник можно интерпретировать немедленно, без необходимости этапа распаковки: один и тот же интерпретатор может работать как с исходным, так и с минимизированным исходным кодом.
Цели минимизации не совпадают с целями запутывания ; первый часто предназначен для переворачивания с помощью красивого принтера [ нужна ссылка ] или минификатор. Однако для достижения своих целей минификация иногда использует методы, также используемые при обфускации ; например, сокращение имен переменных и рефакторинг исходного кода . Когда при минификации используются такие методы, симпатичный принтер или унминификатор могут полностью обратить процесс минификации только в том случае, если ему предоставлены подробности преобразований, выполненных с помощью таких методов. Если не предоставить эти сведения, обратный исходный код будет содержать другие имена переменных и поток управления, даже если он будет иметь ту же функциональность, что и исходный исходный код .
Пример [ править ]
Например, JavaScript код
// This is a comment that will be removed by the minifier
var array = [];
for (var i = 0; i < 20; i++) {
array[i] = i;
}
эквивалентно, но длиннее, чем
for(var a=[],i=0;i<20;a[i]=i++);
История [ править ]
В 2001 году Дуглас Крокфорд представил JSMin , [1] который удалил комментарии и пробелы из кода JavaScript. [2] За ним последовал YUI Compressor в 2007 году. [2] В 2009 году Google открыл свой набор инструментов Closure, в том числе Closure Compiler , который содержал функцию сопоставления исходного кода вместе с расширением Firefox под названием Closure Inspector. [3] В 2010 году Михай Базон представил UglifyJS , который в 2012 году был заменен UglifyJS2; переписывание должно было обеспечить поддержку исходных карт. [4] С 2017 года Алекс Лам взял на себя обслуживание и разработку UglifyJS2, заменив его на UglifyJS3, который объединил CLI с API. [5] В 2018 году Terser был отделен от uglify-es. [6] [7] и с тех пор набирает обороты; в 2020 году он опередил UglifyJS по количеству ежедневных загрузок. [8]
Сопоставление источников [ править ]
Карта исходного кода — это формат файла , который позволяет программным инструментам для JavaScript отображать пользователю код, отличный от кода, фактически выполняемого компьютером. Например, чтобы помочь в отладке минимизированного кода, вместо этого «сопоставьте» этот код с исходным неминифицированным исходным кодом .
Исходный формат был создан Джозефом Шорром в рамках проекта минификации Closure Inspector. [9] Версия 2 и 3 формата значительно уменьшила размер файлов карт. [9]
Типы [ править ]
Инструменты [ править ]
Visual Studio Code поддерживает минификацию для нескольких языков. Он может легко просмотреть Visual Studio Marketplace, чтобы загрузить и установить дополнительные минификаторы.
Оптимизаторы JavaScript могут минимизировать и генерировать исходные карты. Кроме того, некоторые онлайн-инструменты могут сжимать CSS . файлы [10]
Веб-разработка [ править ]
Компоненты и библиотеки для веб-приложений и веб-сайтов были разработаны для оптимизации запросов к файлам и сокращения времени загрузки страниц за счет уменьшения размера различных файлов.
Ресурсы JavaScript и каскадной таблицы стилей (CSS) можно минимизировать, сохранив их поведение и значительно уменьшив размер файлов. Библиотеки, доступные в Интернете, способны в разной степени минимизировать и оптимизировать. Некоторые библиотеки также объединяют несколько файлов сценариев в один файл для загрузки клиентом. Карты исходного кода JavaScript могут сделать код читаемым и отлаживаемым даже после того, как он был объединен и минимизирован. [11]
Ссылки [ править ]
- ^ Крокфорд, Дуглас (11 сентября 2001 г.). «JSMin: минимизатор JavaScript» . Крокфорд.com . Самостоятельно опубликовано . Архивировано из оригинала 5 апреля 2002 года.
- ^ Jump up to: Перейти обратно: а б «Минификация кода» . веб-платформа.github.io . Проект веб-платформы. Архивировано из оригинала 24 апреля 2016 года.
- ^ Пол, Райан (6 ноября 2009 г.). «Google открывает свой набор инструментов для разработки JavaScript для всех» . Арс Техника .
- ^ Базон, Михай (8 ноября 2012 г.). «Стоит ли вам перейти на UglifyJS2?» . lisperator.net . Самостоятельно опубликовано .
- ^ «uglify-js NPM» . npmjs.com . 6 мая 2017 г.
- ^ «terser · Набор инструментов для обработки и сжатия JavaScript для ES6+» . terser.org . Проверено 29 января 2023 г.
- ^ https://github.com//terser/commit/3ef6879ecafd12b57e575ec85e6104e71d5a1b6f [ только URL ] [ мертвая ссылка ]
- ^ «Терсер против uglify-js» . Тенденции НПМ . Архивировано из оригинала 27 января 2024 года.
- ^ Jump up to: Перейти обратно: а б «Предложение 3-й редакции исходной карты» . 11 января 2011 года. Архивировано из оригинала 26 ноября 2014 года . Проверено 16 апреля 2016 г.
- ^ Мегида, Диллион (18 мая 2022 г.). «Минификация CSS – объяснение минимизации и сжатия CSS» . Лагерь бесплатного кода . Проверено 29 марта 2024 г.
- ^ Седдон, Райан (21 марта 2012 г.). «Введение в карты исходного кода JavaScript» . HTML5 рок . Архивировано из оригинала 28 декабря 2021 года.