La 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 generalmente incluyen espacios en blanco , caracteres de nueva línea , comentarios y, a veces, delimitadores de bloque , que se utilizan para agregar legibilidad al código pero no son necesarios para su ejecución. La minificación reduce el tamaño del código fuente, haciendo más eficiente su transmisión a través de una red (por ejemplo, Internet). En la cultura de los programadores, apuntar a un código fuente extremadamente minimizado es el propósito de las competiciones de golf de códigos recreativos .
La minificación se puede distinguir del concepto más general de compresión de datos en que la fuente minificada 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 fuente minificada.
Los objetivos de la minificación no son los mismos que los de la ofuscación ; A menudo se pretende revertir el primero utilizando una impresora bonita [ cita necesaria ] o un minificador. Sin embargo, para lograr sus objetivos, la minificación utiliza en ocasiones técnicas también utilizadas por la ofuscación ; por ejemplo, acortar nombres de variables y refactorizar el código fuente . Cuando la minificación utiliza tales técnicas, el bonito impresor o el desminificador solo puede revertir completamente el proceso de minificació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á diferentes nombres de variables y flujo de control, 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 ++ ) { matriz [ i ] = i ; }
es equivalente pero más largo que
para ( var a = [], i = 0 ; i < 20 ; a [ i ] = i ++ );
En 2001, Douglas Crockford presentó 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 de cierre, incluido el compilador de cierre que contenía una función de mapeo de fuentes junto con una extensión de Firefox llamada Closing Inspector. [3] En 2010, Mihai Bazon presentó UglifyJS , que fue reemplazado por UglifyJS2 en 2012; la reescritura fue para permitir la compatibilidad con el mapa fuente. [4] A partir de 2017, Alex Lam se hizo cargo del mantenimiento y desarrollo de UglifyJS2, reemplazándolo con 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 en términos de descargas diarias. [8]
Un mapa fuente es un formato de archivo que permite que las herramientas de software para JavaScript muestren a un usuario un código diferente al código realmente ejecutado por la computadora. Por ejemplo, para ayudar en la depuración de código minificado, "asignando" este código al código fuente original no minificado .
El formato original fue creado por Joseph Schorr como parte del proyecto de minificación del Inspector de Cierre. [9] Las versiones 2 y 3 del formato redujeron considerablemente el tamaño de los archivos de mapas. [9]
Visual Studio Code viene con soporte de minificación para varios idiomas. Puede navegar fácilmente por Visual Studio Marketplace para descargar e instalar minificadores adicionales.
Los optimizadores de JavaScript pueden minimizar y generar mapas de origen. Además, determinadas herramientas online 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, preservando su comportamiento y reduciendo considerablemente el tamaño de sus archivos. Las bibliotecas disponibles en línea son capaces de minificación y optimización en diversos grados. Algunas bibliotecas también combinan varios archivos de script en un solo archivo para descargarlo el cliente. Los mapas fuente de JavaScript pueden hacer que el código sea legible y depurable incluso después de haberlo combinado y minimizado. [11]