Articulo de referencia

Minificación (programación)

La minificación (también llamada minimización ) es el proceso de eliminar todos los caracteres innecesarios del código fuente de los lenguajes de programación interpretados o le...

La minificación (también llamada 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 alterar su funcionalidad. Estos caracteres innecesarios suelen incluir espacios en blanco , saltos de línea , comentarios y, a veces, delimitadores de bloque , que se utilizan para mejorar la legibilidad del código, pero 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 la programación, lograr un código fuente extremadamente minificado es el objetivo de las competiciones de programación recreativa tipo " code golf" y forma parte de la demoscene .

La minificación se distingue del concepto más general de compresión de datos en que el código fuente minificado se puede interpretar inmediatamente sin necesidad de un paso de descompresión: el mismo intérprete puede trabajar tanto con el código fuente original como con el minificado.

Los objetivos de la minificación no son los mismos que los de la ofuscación ; la primera suele estar diseñada para ser revertida mediante un formateador o desminificador. Sin embargo, para lograr sus objetivos, la minificación a veces utiliza técnicas que también se emplean en la ofuscación; por ejemplo, acortar los nombres de las variables y refactorizar el código fuente. Cuando la minificación utiliza estas técnicas, el formateador o desminificador solo puede revertir completamente el proceso si se le proporcionan los detalles de las transformaciones realizadas. De no proporcionarse dichos detalles, el código fuente revertido contendrá nombres de variables y flujo de control diferentes, aunque tendrá la misma funcionalidad que el código fuente original.

Ejemplo

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 ++ );

Historia

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 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 presentó UglifyJS , que fue reemplazado por UglifyJS2 en 2012; la reescritura fue para permitir el soporte de mapas de origen. [ 4 ] Desde 2017, Alex Lam asumió el 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 cuanto a descargas diarias. [ 8 ] Desde finales de 2018, Terser ha recomendado el empaquetador RollupJS . [ 9 ]

Mapeo de origen

Un mapa de origen es un formato de archivo que permite a las herramientas de software para JavaScript mostrar al usuario un código diferente al que ejecuta realmente el ordenador. Por ejemplo, para facilitar la depuración de código minificado, se puede "mapear" este código con el código fuente original sin minificar .

El formato original fue creado por Joseph Schorr como parte del proyecto de minificación Closure Inspector. [ 10 ] Las versiones 2 y 3 del formato redujeron considerablemente el tamaño de los archivos de mapas. [ 10 ] En 2024, los mapas fuente fueron estandarizados por el comité técnico TC39 de Ecma International como ECMA-426 . [ 11 ]

Tipos

Los recursos de JavaScript y hojas de estilo en cascada (CSS) se pueden minificar, conservando su comportamiento y reduciendo considerablemente el tamaño de sus archivos. Existen bibliotecas en línea que permiten la minificación y optimización en distintos grados. Algunas bibliotecas también combinan varios archivos de script en un único archivo para su descarga por parte del cliente. Los mapas de origen de JavaScript permiten que el código sea legible y depurable incluso después de haber sido combinado y minificado. [ 12 ]

Referencias

  1. Crockford, Douglas (11 de septiembre de 2001). "JSMin: El minificador de JavaScript" . Crockford.com . Publicado por el propio autor . Archivado del original el 5 de abril de 2002.
  2. 1 2 "Minificación de código" . webplatform.github.io . El proyecto WebPlatform. Archivado del original el 24 de abril de 2016.
  3. Paul, Ryan (6 de noviembre de 2009). "Google abre su caja de herramientas de desarrollo de JavaScript a todos" . Ars Technica .
  4. Bazon, Mihai (8 de noviembre de 2012). "¿Deberías cambiar a UglifyJS2?" . lisperator.net . Publicado por el autor .
  5. "uglify-js NPM" . npmjs.com . 6 de mayo de 2017.
  6. "terser · Kit de herramientas de compresión y manipulación de JavaScript para ES6+" . terser.org . Consultado el 29 de enero de 2023 .
  7. «Actualizar README.md · terser/terser@3ef6879» . GitHub .
  8. "Terser vs uglify-js" . Tendencias de NPM .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  9. Santos, Fábio (28 de diciembre de 2018). "Actualizar README.md - terser/terser@b2e0736" . GitHub . Consultado el 23 de enero de 2026 .
  10. 1 2 "Propuesta de revisión 3 del mapa fuente" . 11 de enero de 2011. Archivado del original el 8 de marzo de 2016. Recuperado el 16 de abril de 2016 .
  11. "Especificación del formato del mapa fuente" . tc39.es. 14 de marzo de 2026. Archivado del original el 24 de abril de 2026. Consultado el 26 de abril de 2026 .
  12. Seddon, Ryan (21 de marzo de 2012). "Introducción a los mapas de origen de JavaScript" . HTML5 Rocks . Archivado del original el 28 de diciembre de 2021.