stringtranslate.com

Minificación (programación)

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 .

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 ++ ) { matriz [ i ] = i ; }               

es equivalente 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 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]

Mapeo de origen

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]

Tipos

Herramientas

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]

desarrollo web

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]

Referencias

  1. ^ Crockford, Douglas (11 de septiembre de 2001). "JSMin: el minificador de JavaScript". Crockford.com . Autoeditado . Archivado desde el original el 5 de abril de 2002.
  2. ^ ab "Minimización de código". plataforma web.github.io . El proyecto WebPlatform. Archivado desde el 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 Técnica .
  4. ^ Bazon, Mihai (8 de noviembre de 2012). "¿Deberías cambiar a UglifyJS2?". liesperator.net . Autoeditado .
  5. ^ "uglify-js NPM". npmjs.com . 6 de mayo de 2017.
  6. ^ "terser · Conjunto de herramientas de compresor y destructor de JavaScript para ES6 +". terser.org . Consultado el 29 de enero de 2023 .
  7. ^ https://github.com//terser/commit/3ef6879ecafd12b57e575ec85e6104e71d5a1b6f [ URL desnuda ] [ enlace inactivo ]
  8. ^ "Terser frente a uglify-js". Tendencias de la NGP . Archivado desde el original el 27 de enero de 2024.
  9. ^ ab "Propuesta de revisión 3 del mapa fuente". 11 de enero de 2011. Archivado desde el original el 26 de noviembre de 2014 . Consultado el 16 de abril de 2016 .
  10. ^ Megida, Dillion (18 de mayo de 2022). "Minify CSS: explicación de la compresión y minimización de CSS". Campamento de código gratuito . Consultado el 29 de marzo de 2024 .
  11. ^ Seddon, Ryan (21 de marzo de 2012). "Introducción a los mapas fuente de JavaScript". Rocas HTML5 . Archivado desde el original el 28 de diciembre de 2021.