Минимизация кода: удаление ненужных символов без потери функциональности
Minification (programming)
Минификация кода: удаление лишних символов (пробелов, комментариев) без потери функциональности. Уменьшение размера для быстрой загрузки и оптимизации SEO.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Удаление ненужных символов из кода без изменения его функциональности
Removal of unnecessary characters in code without changing its functionality
Минификация (также минимизация) — это процесс удаления всех ненужных символов из исходного кода интерпретируемых языков программирования или языков разметки без изменения его функциональности. Эти ненужные символы обычно включают пробелы, символы новой строки, комментарии и иногда разделители блоков, которые используются для повышения читаемости кода, но не требуются для его выполнения. Минификация уменьшает размер исходного кода, что делает его передачу по сети (например, через Интернет) более эффективной. В среде программистов стремление к предельно минифицированному исходному коду является целью развлекательных соревнований по code golf. Минификацию можно отличить от более общей концепции сжатия данных тем, что минифицированный код можно интерпретировать непосредственно без необходимости в декомпрессии: один и тот же интерпретатор может работать как с исходным, так и с минифицированным кодом. Цели минификации отличаются от целей обфускации; первая часто предназначена для обратимости с помощью pretty printer или деминификатора. Однако для достижения своих целей минификация иногда использует методы, также применяемые при обфускации, например, сокращение имен переменных и рефакторинг исходного кода. Если минификация использует такие методы, pretty printer или деминификатор смогут полностью восстановить исходный код только в том случае, если им будет предоставлена информация о преобразованиях, выполненных этими методами. Если эта информация не предоставлена, восстановленный исходный код будет содержать другие имена переменных и структуру управления, хотя и будет выполнять те же функции, что и исходный код.
Minification (also minimisation or minimization) is the process of removing all unnecessary characters from the source code of interpreted programming languages or markup languages without changing its functionality. These unnecessary characters usually include white space characters, new line characters, comments, and sometimes block delimiters, which are used to add readability to the code but are not required for it to execute. Minification reduces the size of the source code, making its transmission over a network (e. g. the Internet) more efficient. In programmer culture, aiming at extremely minified source code is the purpose of recreational code golf competitions. Minification can be distinguished from the more general concept of data compression in that the minified source can be interpreted immediately without the need for a decompression step: the same interpreter can work with both the original as well as with the minified source. The goals of minification are not the same as the goals of obfuscation; the former is often intended to be reversed using a pretty printer or unminifier. However, to achieve its goals, minification sometimes uses techniques also used by obfuscation; for example, shortening variable names and refactoring the source code. When minification uses such techniques, the pretty printer or unminifier can only fully reverse the minification process if it is supplied details of the transformations done by such techniques. If not supplied those details, the reversed source code will contain different variable names and control flow, even though it will have the same functionality as the original source code.
История
В 2001 году Дуглас Крокфорд представил JSMin, который удалял комментарии и пробельные символы из кода JavaScript. За ним последовал YUI Compressor в 2007 году. В 2010 году Михай Базон представил UglifyJS, который был заменен на UglifyJS2 в 2012 году; переработка была выполнена для обеспечения поддержки source maps. С 2017 года Алекс Лам взял на себя поддержку и разработку UglifyJS2, заменив его на UglifyJS3, который унифицировал интерфейс командной строки и API. В 2018 году Terser был создан на основе uglify-es и с тех пор набирает популярность; в 2020 году он превзошел UglifyJS по количеству ежедневных загрузок.
In 2001 Douglas Crockford introduced JSMin, which removed comments and whitespace from JavaScript code. It was followed by YUI Compressor in 2007. In 2010, Mihai Bazon introduced UglifyJS, which was superseded by UglifyJS2 in 2012; the rewrite was to allow for source map support. From 2017, Alex Lam took over maintenance and development of UglifyJS2, replacing it with UglifyJS3 which unified the CLI with the API. In 2018, Terser has been forked from uglify es and has gained momentum since; in 2020 it outstripped UglifyJS when measured in daily downloads.
Картография источника
Source Map – это формат файла, позволяющий программным инструментам для JavaScript отображать пользователю код, отличный от кода, фактически выполняемого компьютером. Например, это помогает в отладке минифицированного кода, сопоставляя его с исходным неминифицированным кодом. Изначальный формат был разработан Джозефом Шорром в рамках проекта минификации Closure Inspector. Версии 2 и 3 формата значительно уменьшили размер файлов Source Map.
A Source Map is a file format that allows software tools for JavaScript to display different code to a user than the code actually executed by the computer. For example, to aid in debugging of minified code, by "mapping" this code to the original unminified source code instead. The original format was created by Joseph Schorr as part of the Closure Inspector minification project. Version 2 and 3 of the format reduced the size of the map files considerably.
Разработка веб-сайтов
Разработаны компоненты и библиотеки для веб-приложений и веб-сайтов, предназначенные для оптимизации запросов файлов и сокращения времени загрузки страниц путем уменьшения размера различных файлов. Ресурсы JavaScript и Cascading Style Sheet (CSS) могут быть минифицированы, сохраняя при этом их функциональность и значительно уменьшая размер файлов. Существуют онлайн-библиотеки, обеспечивающие различные уровни минификации и оптимизации. Некоторые из них также объединяют несколько файлов скриптов в один для загрузки клиентом. Карты исходного кода JavaScript (source maps) позволяют сделать код читаемым и отлаживаемым даже после объединения и минификации.
Components and libraries for Web applications and websites have been developed to optimize file requests and reduce page load times by shrinking the size of various files. JavaScript and Cascading Style Sheet (CSS) resources may be minified, preserving their behavior while considerably reducing their file size. Libraries available online are capable of minification and optimization to varying degrees. Some libraries also merge multiple script files into a single file for client download. JavaScript source maps can make code readable and debuggable even after it has been combined and minified.