
Tree shaking vs minificación: qué hace cada palanca
La minificación acorta el JS conservado. El tree shaking retira módulos innecesarios. Tabla comparativa, Vite/Webpack, y cuándo combinarlos.
Dos técnicas que a menudo se confunden
Al optimizar un front moderno, oyes sin parar « minificar » y « tree-shaker » tus bundles. No son dos nombres para lo mismo: la minificación comprime el código ya incluido en el archivo final (espacios, nombres cortos), mientras que el tree shaking retira del grafo los módulos que nunca se usan. Ambos reducen los bytes transferidos, pero en etapas distintas del pipeline. Para un paso rápido sobre un archivo aislado (sin bundler), un minificador JavaScript en línea suele bastar; para una aplicación completa, combinas en general análisis estático de los imports, bundler en modo producción y minificador (Terser, esbuild, SWC…). Esta guía fija las definiciones, una tabla comparativa y una configuración realista con Vite o Webpack — remitiendo a nuestra guía de minificación JavaScript para los ajustes finos.
Minificación y tree shaking: dos efectos distintos
La minificación trabaja sobre un archivo cuyo contenido ya está decidido: quita todo lo superfluo para el motor JS (espacios, comentarios, renombrado local agresivo según la herramienta). No puede adivinar si una función exportada servirá más tarde si ya está presente en el bundle. Para las bases y comparativas de herramientas, consulta nuestra guía completa sobre la minificación JavaScript. Para inspeccionar o recuperar la legibilidad a posteriori, ten a mano un desminificador JavaScript o la función Embellecer.
Antes
Después
El tree shaking se apoya en los módulos ES (`import` / `export`) y en un análisis estático: todo lo que no está referenciado desde una entrada puede apartarse antes incluso de que intervenga la minificación. Las bibliotecas deben exponer builds compatibles (`sideEffects` en `package.json`, sin mutaciones globales ocultas). La demostración más clara sigue siendo el paso de un import « barril » a un import puntual.
Antes
Después
No existe un tree shaking de módulos ES para tu hoja CSS como para el JS, pero los pipelines PostCSS / Tailwind / PurgeCSS juegan un rol equivalente: retiran las reglas no usadas antes de la fase en la que aplicas un minificador CSS en línea o PostCSS cssnano sobre la salida final.
Medir lo que de verdad cambia en el bundle
Las dos técnicas se ven en columnas distintas del informe: el tree shaking disminuye el número y la superficie de los módulos (por ejemplo lodash que desaparece casi por completo), la minificación reduce la columna « tamaño gzip » para un mismo grafo. Usa un treemap para evitar regresiones tras una actualización de dependencias.
Activa sistemáticamente `NODE_ENV=production` (o equivalente): sin esa señal, algunos bundlers desactivan las optimizaciones y la dead-code elimination.
Tabla mental: minificación vs tree shaking
Usa este recap cuando estimes un ticket de optimización: la primera pregunta es « ¿este código debe existir en el grafo? », la segunda es « ¿cómo reducir su representación textual? ».
Minificación
Tree shaking
Estos controles evitan las optimizaciones en el aire.
Minificar rápido un archivo fuera del bundler
Cuando aún no has conectado Webpack/Vite — o cuando optimizas un script entregado tal cual — pega tu JS en nuestra herramienta: obtienes una salida compactada de inmediato, con opción inversa para releer el código.
Pegar o cargar tu archivo
Usa el minificador JavaScript en línea: todo permanece en el navegador.
Comparar con Embellecer
Alterna con Embellecer para un formato legible equivalente a un pequeño « undo » antes de reinjectarlo en tu pipeline.
No confundir con el shaking
La herramienta minifica un archivo a la vez; para eliminar módulos en todo un proyecto, hay que bundlear en producción.
Cuando tu codebase crece, alinéate con las prácticas descritas en nuestra comparativa minificadores en línea vs herramientas de build: la herramienta en línea conserva un lugar para las excepciones y los prototipos.
Combinar tree shaking y minificación en el build
`vite build` activa Rollup en producción con tree shaking y minificación esbuild por defecto — comprueba que tus imports son compatibles ES modules.
Configuration
Uso
`mode: 'production'` activa `usedExports` y la compilación con minifier; asegúrate de que el `package.json` de las libs declara correctamente los efectos de borde.
Configuration
Uso
Encadena purge Tailwind o PurgeCSS, luego minificación — como se ve en nuestra guía sobre la minificación CSS. El shaking « lógico » está del lado del purge; la minificación pule la salida.
Ejemplo básico
Minificación de archivo
Conclusión
Tree shaking y minificación son complementarios: el primero dibuja un grafo ligero, el segundo escribe ese grafo con el mínimo de bytes. Ignora uno u otro y dejas o bien código muerto incluido, o bien una representación todavía verbosa de un grafo ya limpio. Para los snippets fuera del proyecto, un minificador en línea basta; para todo lo demás, automatiza en tu bundler y guarda FastMinify a mano para los casos límite.
Artículos relacionados

YAML roto, `on` o `jobs` ausentes, steps vacíos: valida la estructura de tus workflows antes del push — y deja actionlint para la CI.

Errores de sintaxis SDL, review de esquema y formateo antes del merge — complemento al beautify GraphQL existente.

Reduce la factura OpenAI/Anthropic/Gemini: estima input/output, activa batch y caching en tus cálculos — tarifas verificadas, 100 % local.