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


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

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

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

В 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] В 2018 году Terser был разветвлен от uglify-es [6] [7] и с тех пор набирает обороты; в 2020 году он опередил UglifyJS по ежедневным загрузкам. [8]

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

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