Qué es minificar código: HTML, CSS y JavaScript frente a gzip y brotli

Quitar espacios y comentarios reduce el peso de los archivos, pero no sustituye a gzip y, si se hace sin cuidado, rompe el código. Te explicamos qué se elimina al minificar, dónde están los riesgos y cómo volver a leer código minificado.

10 min de lectura ToolsBasic
Qué es minificar código: HTML, CSS y JavaScript frente a gzip y brotli

Minificar código consiste en eliminar de los archivos HTML, CSS y JavaScript todo lo que el navegador no necesita: espacios, saltos de línea, comentarios y cualquier formato pensado solo para las personas. El código funciona exactamente igual, pero deja de ser cómodo de leer. Minificar no es lo mismo que comprimir con gzip o brotli: trabajan en capas distintas y el mejor resultado sale de combinarlos. Las herramientas más agresivas, además, acortan nombres de variables y eliminan código que no se usa, y ahí está casi todo el riesgo.

En este sitio, la herramienta para minificar HTML elimina comentarios y espacios sobrantes y reduce también el CSS y el JavaScript incrustados. La de minificar JavaScript quita comentarios y espacios innecesarios, pero no toca los nombres de las variables. Para el camino inverso, leer algo que ya viene comprimido en una línea, tienes formatear JavaScript, formatear CSS y formatear HTML, que lo vuelven a abrir con sangría de dos espacios.

Qué elimina exactamente minificar código

Un archivo fuente está lleno de caracteres que no significan nada para el navegador: sangrías, líneas en blanco, comentarios explicativos, el último punto y coma de un bloque, ceros sobrantes. El minificador los quita y nunca debe tocar nada que cambie el significado. Lo que es seguro borrar depende del lenguaje:

LenguajeLo que suele eliminarseLo que hay que conservarLo que añaden las herramientas avanzadas
HTMLComentarios, espacios sobrantes entre etiquetasContenido de pre y textarea, espacios entre palabrasQuitar etiquetas de cierre opcionales y comillas de atributos
CSSComentarios, espacios, el último punto y coma de cada bloqueEspacios alrededor de los operadores en calc(), valores de textoAbreviar colores, fusionar reglas
JavaScriptComentarios, sangría, saltos de línea innecesariosSaltos que necesita la ASI, contenido de cadenas y expresiones regularesRenombrar variables (mangling), eliminar código muerto

El minificador de JavaScript de este sitio hace lo de las dos primeras columnas, no lo de la última: no renombra variables. Es un límite intencionado. El resultado ocupa algo más que con una herramienta que acorta nombres, pero sigue siendo legible y no puede romper código que lee nombres de funciones en tiempo de ejecución.

Un ejemplo de antes y después

Partimos de una función escrita sin punto y coma:

// Calcula el total del carrito
function totalCarrito(productos) {
let total = 0
for (const producto of productos) {
total += producto.precio * producto.cantidad
}
return total
}

Tras pasar por el minificador queda así:

function totalCarrito(productos){let total=0
for(const producto of productos){total+=producto.precio*producto.cantidad}
return total}

Con su sangría original, el archivo ocupaba 191 bytes; ahora ocupa 133. Fíjate en que se han conservado dos saltos de línea. No es un descuido: como el código no usa punto y coma, JavaScript se apoya en esos saltos para saber dónde acaba cada instrucción, mediante la inserción automática de punto y coma (ASI). Si se borraran, quedaría let total=0for(...), que es un error de sintaxis.

Minificar código no sustituye a gzip ni a brotli

Se confunden a menudo porque las dos técnicas reducen el tamaño. La diferencia está en qué hacen, cuándo y si se puede deshacer:

AspectoMinificaciónGzip / Brotli
Cuándo ocurreUna vez, al preparar la publicaciónEn cada respuesta, a cargo del servidor o la CDN
Qué haceBorra para siempre caracteres innecesariosCodifica repeticiones; el navegador recupera el archivo exacto
¿Es reversible?No; comentarios y formato desaparecenSí, no pierde nada
Cómo se detectaMirando el propio archivoPor la cabecera Content-Encoding: gzip o br

Brotli, definido en el RFC 7932, suele comprimir el texto algo mejor que gzip, y los navegadores actuales lo admiten en conexiones HTTPS. Como la compresión detecta muy bien los patrones repetidos, ya se come buena parte del coste de las sangrías, así que la ganancia de minificar parece menor después de comprimir que antes. Pero no desaparece: los comentarios y las explicaciones largas siguen ocupando sitio tras la compresión, y el navegador tiene que analizar todo lo que recibe. El orden es siempre el mismo: minificar al construir, comprimir al servir.

Riesgos según el lenguaje

HTML: los espacios que sí importan

Entre elementos en línea, el espacio forma parte del contenido. En <a href="/">Inicio</a> <a href="/blog">Blog</a>, si borras ese único espacio los dos enlaces quedan pegados. Por eso el minificador de HTML de este sitio reduce las secuencias de espacios a uno solo en lugar de eliminarlas, y respeta el texto visible y los espacios en línea. El contenido de pre y textarea se deja tal cual. Los comentarios desaparecen, salvo los condicionales que se escribían para versiones antiguas de Internet Explorer (<!--[if IE]>). Los bloques <style> y <script> incrustados y los datos estructurados JSON-LD también se minifican.

CSS: calc() y valores de texto

El fallo clásico al minificar CSS es quitar los espacios de calc(100% - 2rem). Alrededor de los operadores de suma y resta son obligatorios; calc(100%-2rem) no es válido y el navegador ignora la declaración sin avisar. El texto de la propiedad content y las rutas dentro de url() también tienen que quedar intactos. Este sitio no tiene una página específica para minificar CSS: las hojas de estilo suelen minificarse con tu herramienta de compilación, y el CSS incrustado en una página se reduce al pasar el HTML por su minificador.

JavaScript: ASI, cadenas y licencias

Hay dos trampas principales. La primera es la ASI que viste en el ejemplo: un minificador que borra saltos de línea a ciegas en código sin punto y coma lo rompe, y la herramienta de este sitio conserva los que hacen falta. La segunda es el contenido de cadenas, plantillas literales y expresiones regulares, donde los espacios y las secuencias // no pueden confundirse con comentarios ni con espacios sobrantes. La herramienta procesa el código con un analizador léxico (tokenizer) que reconoce esas construcciones, en lugar de buscar y reemplazar a ciegas.

Los comentarios de licencia son una cuestión legal más que técnica. Muchas licencias de código abierto, entre ellas la MIT, exigen que el aviso de copyright y de permiso acompañe a las copias del software. Por eso los minificadores conservan los comentarios que empiezan por /*!. La herramienta de este sitio elimina todos los demás comentarios, pero deja intacta una cabecera como /*! libreria v1.2.0 | MIT */.

Source maps: depurar código minificado

Cuando falla algo en un archivo minificado, la consola señala una posición como app.min.js:1:48213: línea uno, columna 48.213. Por sí sola no dice casi nada. Un source map (mapa de código fuente) es un archivo aparte que registra a qué punto del original corresponde cada posición del archivo minificado. Las herramientas de compilación lo generan como app.min.js.map y añaden al final del minificado el comentario //# sourceMappingURL=app.min.js.map; con las herramientas para desarrolladores abiertas, el navegador descarga el mapa y te muestra el error en la línea original.

  • Publicar los source maps es publicar tu código original con sus comentarios. Si no quieres eso, súbelos solo a tu servicio de seguimiento de errores.
  • Las herramientas de este sitio no generan source maps: devuelven solo el código reducido. Y como el minificador de JavaScript elimina los comentarios, un sourceMappingURL presente en la entrada tampoco sobrevive.
  • Guarda el archivo original en tu control de versiones y no edites nunca a mano la salida minificada.

Leer código minificado: formatear

Formatear (beautify) es la operación inversa: toma una línea compacta y la reparte de nuevo en líneas con sangría. Sirve para entender qué hace un script de terceros, encontrar la regla que choca en una hoja de estilos de producción o revisar el HTML copiado de un correo. Conviene conocer su límite: un formateador no recupera los comentarios borrados ni los nombres originales de variables renombradas; solo vuelve a hacer visible la estructura.

  1. Copia el código minificado y pégalo en el formateador que corresponda: JavaScript, CSS o HTML.
  2. Lee el resultado con su sangría de dos espacios. En HTML, los elementos en línea se mantienen en la misma línea y el contenido de script y style también se formatea.
  3. Localiza la función o el selector que te interesa y apunta qué hay que cambiar.
  4. Haz el cambio en el archivo fuente original y vuelve a minificar. No publiques la copia formateada.

Cuánto mejora la velocidad de carga

Reducir los archivos ahorra tiempo en tres puntos: viajan menos bytes por la red, el navegador tiene menos texto que analizar y el CSS y los scripts síncronos que bloquean el renderizado terminan antes, de modo que la página se pinta antes. Cuánto se gana depende por completo del archivo. Uno lleno de comentarios y con sangrías generosas adelgaza mucho; uno que ya estaba escrito de forma compacta apenas cambia.

También hay que poner las cosas en perspectiva. En la mayoría de sitios, las imágenes son la mayor parte del peso de la página. Una hoja de estilos sin minificar es un mal hábito, pero una foto de portada sin comprimir de varios megas es un problema mucho mayor. Herramientas de auditoría como Lighthouse pueden señalar el CSS y el JavaScript sin minificar, y es un aviso fácil de resolver, pero el trabajo de velocidad debería empezar por los archivos más pesados.

  • Minifica de forma automática en el proceso de compilación; los archivos minificados a mano se rompen con la primera corrección urgente.
  • Comprueba en las cabeceras de respuesta que gzip o brotli están realmente activados en el servidor.
  • Pon a los archivos minificados nombres con huella de contenido, como app.3f9c1a.min.js, y sírvelos con caché de larga duración.
  • Incluye en la misma lista las cadenas de redirecciones y las imágenes enormes; recortar código por sí solo no salva una página lenta.

Preguntas frecuentes

¿El código minificado se ejecuta más rápido?

La velocidad de ejecución es prácticamente la misma; la ganancia está en la descarga y el análisis. El navegador ya ignora espacios y comentarios, así que minificar no cambia la lógica del programa: solo hace que llegue antes al motor.

¿Minificar sirve para ocultar el código?

No. Cualquier formateador lo vuelve legible, e incluso con nombres acortados se puede seguir la lógica. Las claves y las reglas de negocio que deban ser privadas no tienen que estar en el código que se envía al navegador.

¿Es un problema eliminar los comentarios de licencia?

Puede serlo. Licencias como la MIT exigen que el aviso de copyright acompañe a las copias del código. Usa un minificador que respete los comentarios /*! o publica los textos de licencia en un archivo aparte.

Si ya tengo gzip activado, ¿sigo necesitando minificar?

Sí, aunque la diferencia es menor de lo que sugieren los tamaños sin comprimir. La compresión se ocupa de las repeticiones; solo la minificación elimina comentarios y peso muerto. Juntas dan la transferencia más pequeña.

Las imágenes suelen pesar mucho más que el código, así que sigue con compresión de imágenes y rendimiento web. El coste de incrustar archivos pequeños en tu código lo explicamos en qué es Base64, y otra fuente de retraso antes incluso de que la página empiece a cargar está en redirecciones 301 y 302.

Herramientas relacionadas

Catálogo

Artículos del blog