Minificación (también minimización o minimización ) es el proceso de eliminar todos los caracteres innecesarios del código fuente de los lenguajes de programación interpretados o lenguajes de marcado sin cambiar su funcionalidad. Estos caracteres innecesarios suelen incluir caracteres de espacio en blanco , caracteres de nueva línea , comentarios y, a veces, delimitadores de bloque , que se utilizan para agregar legibilidad al código pero que no son necesarios para su ejecución. La minificación reduce el tamaño del código fuente, lo que hace que su transmisión a través de una red (por ejemplo, Internet) sea más eficiente. En la cultura de los programadores, el objetivo de las competiciones de golf de código recreativo es apuntar a un código fuente extremadamente minimizado .
La minimización se puede distinguir del concepto más general de compresión de datos en que la fuente minimizada se puede interpretar inmediatamente sin necesidad de un paso de descompresión: el mismo intérprete puede trabajar tanto con la fuente original como con la minimizada.
Los objetivos de la minimización no son los mismos que los de la ofuscación ; a menudo se pretende revertir la primera utilizando un programa de impresión bonita [ cita requerida ] o un desminificador. Sin embargo, para lograr sus objetivos, la minimización a veces utiliza técnicas que también utiliza la ofuscación ; por ejemplo, acortar los nombres de las variables y refactorizar el código fuente . Cuando la minimización utiliza dichas técnicas, el programa de impresión bonita o el desminificador solo pueden revertir completamente el proceso de minimización si se le proporcionan detalles de las transformaciones realizadas por dichas técnicas. Si no se proporcionan esos detalles, el código fuente invertido contendrá nombres de variables y flujo de control diferentes, aunque tendrá la misma funcionalidad que el código fuente original .
Por ejemplo, el código JavaScript
// Este es un comentario que será eliminado por el minificador var array = []; for ( var i = 0 ; i < 20 ; i ++ ) { array [ i ] = i ; }
es equivalente a pero más largo que
para ( var a = [], i = 0 ; i < 20 ; a [ i ] = i ++ );
En 2001, Douglas Crockford introdujo JSMin , [1] que eliminó los comentarios y los espacios en blanco del código JavaScript. [2] Le siguió YUI Compressor en 2007. [2] En 2009, Google abrió su kit de herramientas Closure, incluido Closure Compiler , que contenía una función de mapeo de origen junto con una extensión de Firefox llamada Closure Inspector. [3] En 2010, Mihai Bazon introdujo UglifyJS , que fue reemplazado por UglifyJS2 en 2012; la reescritura fue para permitir el soporte de mapas de origen. [4] A partir de 2017, Alex Lam se hizo cargo del mantenimiento y desarrollo de UglifyJS2, reemplazándolo por UglifyJS3, que unificó la CLI con la API. [5] En 2018, Terser se bifurcó de uglify-es [6] [7] y ha ganado impulso desde entonces; en 2020 superó a UglifyJS cuando se midió en descargas diarias. [8]
Un mapa de origen es un formato de archivo que permite que las herramientas de software para JavaScript muestren a un usuario un código distinto del código que realmente ejecuta la computadora. Por ejemplo, para ayudar a depurar el código minimizado, "mapear" este código con el código fuente original sin minimizar .
El formato original fue creado por Joseph Schorr como parte del proyecto de minimización Closure Inspector. [9] Las versiones 2 y 3 del formato redujeron considerablemente el tamaño de los archivos de mapas. [9]
Visual Studio Code incluye compatibilidad con minificadores para varios lenguajes. Puede explorar fácilmente Visual Studio Marketplace para descargar e instalar minificadores adicionales.
Los optimizadores de JavaScript pueden minimizar y generar mapas de código fuente. Además, ciertas herramientas en línea pueden comprimir archivos CSS . [10]
Se han desarrollado componentes y bibliotecas para aplicaciones web y sitios web para optimizar las solicitudes de archivos y reducir los tiempos de carga de las páginas al reducir el tamaño de varios archivos.
Los recursos de JavaScript y de hojas de estilo en cascada (CSS) se pueden minimizar, conservando su comportamiento y reduciendo considerablemente el tamaño de archivo. Las bibliotecas disponibles en línea son capaces de minimizar y optimizar en distintos grados. Algunas bibliotecas también fusionan varios archivos de script en un solo archivo para que el cliente los descargue. Los mapas de código fuente de JavaScript pueden hacer que el código sea legible y depurable incluso después de que se haya combinado y minimizado. [11]