/bundle-size
Analizar y reducir el tamaño de bundles frontend. Activar cuando el bundle sea grande, se quiera reducir tamaño, aplicar tree shaking, configurar lazy loading, usar webpack analyzer o analizar el peso de la aplicacion.
$ npx -y skills add 686f6c61/alfred-dev --skill bundle-size --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/bundle-size
Context preview
The summary Claude sees to decide when to auto-load this skill.
Analizar y reducir el tamaño de bundles frontend. Activar cuando el bundle sea grande, se quiera reducir tamaño, aplicar tree shaking, configurar lazy loading, usar webpack analyzer o analizar el peso de la aplicacion.
SKILL.md
bundle-size.SKILL.mdname: bundle-size
description: "Analizar y reducir el tamaño de bundles frontend. Activar cuando el bundle sea grande, se quiera reducir tamaño, aplicar tree shaking, configurar lazy loading, usar webpack analyzer o analizar el peso de la aplicacion."
Análisis y reducción de bundle size
Resumen
Este skill guía el proceso de analizar y reducir el tamaño de los bundles de una aplicación frontend. Cada kilobyte adicional en el bundle se traduce en mayor tiempo de descarga, más consumo de datos del usuario y mayor tiempo hasta la interactividad. En conexiones lentas o dispositivos modestos, un bundle sobredimensionado puede hacer que la aplicación sea inutilizable.
El proceso parte del análisis visual del bundle actual, identifica las causas del tamaño excesivo y propone soluciones concretas que se validan midiendo antes y después.
Proceso
1. **Medir el tamaño actual del bundle.** Antes de optimizar, registrar el estado de partida como baseline:
- Tamaño total del bundle (sin comprimir y con gzip/brotli).
- Tamaño de cada chunk o archivo generado por el bundler.
- Tamaño del JavaScript, CSS e imágenes por separado.
- Tiempo de carga en Lighthouse con throttling de red simulando 3G.
2. **Generar el mapa visual del bundle.** Usar la herramienta correspondiente al bundler del proyecto:
- **Webpack:** `webpack-bundle-analyzer` genera un treemap interactivo del contenido del bundle.
- **Vite/Rollup:** `rollup-plugin-visualizer` con formato treemap o sunburst.
- **Independiente del bundler:** `source-map-explorer` analiza los source maps para mostrar qué ocupa espacio.
Estas visualizaciones revelan de un vistazo qué dependencias y módulos dominan el tamaño.
3. **Identificar los problemas habituales.** Buscar estos patrones en el mapa visual:
- **Dependencias duplicadas:** la misma librería aparece varias veces con versiones diferentes (por ejemplo, dos versiones de `lodash` por subdependencias incompatibles).
- **Imports completos de librerías grandes:** se importa toda la librería cuando solo se usa una función (`import _ from 'lodash'` en lugar de `import groupBy from 'lodash/groupBy'`).
- **Código muerto:** módulos importados pero nunca referenciados en la ejecución real.
- **Polyfills innecesarios:** polyfills para navegadores que ya no se soportan.
- **Assets no optimizados:** imágenes o fuentes incluidas en el bundle en lugar de cargarse como recursos estáticos.
- **Librerías pesadas con alternativas ligeras:** `moment.js` (300KB+) cuando `date-fns` o `dayjs` cubren el mismo caso de uso.
4. **Aplicar las soluciones.** Para cada problema identificado, actuar con la técnica adecuada:
- **Tree-shaking:** asegurar que las dependencias usan módulos ES (ESM). Verificar que el bundler no desactiva tree-shaking por configuración incorrecta de `sideEffects` en `package.json`.
- **Code splitting:** dividir el bundle en chunks que se cargan bajo demanda. Rutas diferentes = chunks diferentes. Componentes pesados que no son visibles inicialmente = lazy loading con `React.lazy()`, `defineAsyncComponent()` o `import()` dinámico.
- **Lazy loading:** cargar componentes, rutas y módulos solo cuando el usuario los necesita. Implementar `Suspense` o equivalente para gestionar el estado de carga.
- **Alternativas ligeras:** sustituir dependencias pesadas por alternativas que cubran el caso de uso real:
| Librería pesada | Alternativa ligera | Reducción aproximada | |-----------------|-------------------|---------------------| | moment.js | dayjs, date-fns | ~95% | | lodash (completo) | lodash-es (cherry-pick) | ~80% | | axios | fetch nativo + wrapper | ~100% (elimina dep) | | numeral.js | Intl.NumberFormat | ~100% (nativo) |
- **Externalizar dependencias grandes:** si una librería se usa en todas las páginas (React, Vue), servirla desde CDN o como chunk separado con caché larga.
- **Comprimir assets:** configurar gzip o brotli en el servidor. Brotli ofrece entre un 15-25% mejor ratio que gzip.
5. **Medir el resultado y comparar.** Repetir las mediciones del paso 1 tras aplicar los cambios:
- Comparar tamaño total, tamaño por chunk y tiempo de carga.
- Verificar que la funcionalidad no se ha visto afectada.
- Generar nuevo mapa visual para confirmar que los problemas se han resuelto.
- Documentar los cambios realizados y la reducción conseguida.
6. **Establecer presupuesto de bundle.** Para evitar que el tamaño vuelva a crecer sin control:
- Definir un límite máximo para el bundle principal (por ejemplo, 200KB gzip).
- Configurar alertas en CI con `bundlesize`, `size-limit` o la funcionalidad de presupuesto del bundler.
- Revisar el impacto en tamaño antes de añadir nuevas dependencias.
Que NO hacer
- No optimizar sin medir primero. Una reducción de 2KB en un bundle de 3MB no merece esfuerzo; una de 200KB en un bundle de 400KB es transformadora.
- No sacrificar la experiencia de desarrollo por una optimización marginal. Si una dependencia mejora significativamente la productividad del equipo, su tamaño puede ser aceptable.
- No asumir que el tree-shaking funciona sin verificarlo. Librerías que usan CommonJS, asignaciones a `module.exports` dinámicas o efectos secundarios en la raíz del módulo pueden anular el tree-shaking.
- No cargar todo de forma lazy. El chunk inicial debe contener lo necesario para el primer renderizado; el lazy loading excesivo genera cascadas de peticiones que empeoran la experiencia.
Read more
name: bundle-size description: "Analizar y reducir el tamaño de bundles frontend. Activar cuando el bundle sea grande, se quiera reducir tamaño, aplicar tree shaking, configurar lazy loading, usar webpack analyzer o analizar el peso de la aplicacion."
Análisis y reducción de bundle size
Resumen
Este skill guía el proceso de analizar y reducir el tamaño de los bundles de una aplicación frontend. Cada kilobyte adicional en el bundle se traduce en mayor tiempo de descarga, más consumo de datos del usuario y mayor tiempo hasta la interactividad. En conexiones lentas o dispositivos modestos, un bundle sobredimensionado puede hacer que la aplicación sea inutilizable.
El proceso parte del análisis visual del bundle actual, identifica las causas del tamaño excesivo y propone soluciones concretas que se validan midiendo antes y después.
Proceso
1. **Medir el tamaño actual del bundle.** Antes de optimizar, registrar el estado de partida como baseline:
- Tamaño total del bundle (sin comprimir y con gzip/brotli).
- Tamaño de cada chunk o archivo generado por el bundler.
- Tamaño del JavaScript, CSS e imágenes por separado.
- Tiempo de carga en Lighthouse con throttling de red simulando 3G.
2. **Generar el mapa visual del bundle.** Usar la herramienta correspondiente al bundler del proyecto:
- **Webpack:** `webpack-bundle-analyzer` genera un treemap interactivo del contenido del bundle.
- **Vite/Rollup:** `rollup-plugin-visualizer` con formato treemap o sunburst.
- **Independiente del bundler:** `source-map-explorer` analiza los source maps para mostrar qué ocupa espacio.
Estas visualizaciones revelan de un vistazo qué dependencias y módulos dominan el tamaño.
3. **Identificar los problemas habituales.** Buscar estos patrones en el mapa visual:
- **Dependencias duplicadas:** la misma librería aparece varias veces con versiones diferentes (por ejemplo, dos versiones de `lodash` por subdependencias incompatibles).
- **Imports completos de librerías grandes:** se importa toda la librería cuando solo se usa una función (`import _ from 'lodash'` en lugar de `import groupBy from 'lodash/groupBy'`).
- **Código muerto:** módulos importados pero nunca referenciados en la ejecución real.
- **Polyfills innecesarios:** polyfills para navegadores que ya no se soportan.
- **Assets no optimizados:** imágenes o fuentes incluidas en el bundle en lugar de cargarse como recursos estáticos.
- **Librerías pesadas con alternativas ligeras:** `moment.js` (300KB+) cuando `date-fns` o `dayjs` cubren el mismo caso de uso.
4. **Aplicar las soluciones.** Para cada problema identificado, actuar con la técnica adecuada:
- **Tree-shaking:** asegurar que las dependencias usan módulos ES (ESM). Verificar que el bundler no desactiva tree-shaking por configuración incorrecta de `sideEffects` en `package.json`.
- **Code splitting:** dividir el bundle en chunks que se cargan bajo demanda. Rutas diferentes = chunks diferentes. Componentes pesados que no son visibles inicialmente = lazy loading con `React.lazy()`, `defineAsyncComponent()` o `import()` dinámico.
- **Lazy loading:** cargar componentes, rutas y módulos solo cuando el usuario los necesita. Implementar `Suspense` o equivalente para gestionar el estado de carga.
- **Alternativas ligeras:** sustituir dependencias pesadas por alternativas que cubran el caso de uso real:
| Librería pesada | Alternativa ligera | Reducción aproximada | |-----------------|-------------------|---------------------| | moment.js | dayjs, date-fns | ~95% | | lodash (completo) | lodash-es (cherry-pick) | ~80% | | axios | fetch nativo + wrapper | ~100% (elimina dep) | | numeral.js | Intl.NumberFormat | ~100% (nativo) |
- **Externalizar dependencias grandes:** si una librería se usa en todas las páginas (React, Vue), servirla desde CDN o como chunk separado con caché larga.
- **Comprimir assets:** configurar gzip o brotli en el servidor. Brotli ofrece entre un 15-25% mejor ratio que gzip.
5. **Medir el resultado y comparar.** Repetir las mediciones del paso 1 tras aplicar los cambios:
- Comparar tamaño total, tamaño por chunk y tiempo de carga.
- Verificar que la funcionalidad no se ha visto afectada.
- Generar nuevo mapa visual para confirmar que los problemas se han resuelto.
- Documentar los cambios realizados y la reducción conseguida.
6. **Establecer presupuesto de bundle.** Para evitar que el tamaño vuelva a crecer sin control:
- Definir un límite máximo para el bundle principal (por ejemplo, 200KB gzip).
- Configurar alertas en CI con `bundlesize`, `size-limit` o la funcionalidad de presupuesto del bundler.
- Revisar el impacto en tamaño antes de añadir nuevas dependencias.
Que NO hacer
- No optimizar sin medir primero. Una reducción de 2KB en un bundle de 3MB no merece esfuerzo; una de 200KB en un bundle de 400KB es transformadora.
- No sacrificar la experiencia de desarrollo por una optimización marginal. Si una dependencia mejora significativamente la productividad del equipo, su tamaño puede ser aceptable.
- No asumir que el tree-shaking funciona sin verificarlo. Librerías que usan CommonJS, asignaciones a `module.exports` dinámicas o efectos secundarios en la raíz del módulo pueden anular el tree-shaking.
- No cargar todo de forma lazy. El chunk inicial debe contener lo necesario para el primer renderizado; el lazy loading excesivo genera cascadas de peticiones que empeoran la experiencia.
Plugin de Claude Code: 18 agentes especializados, 60 skills, 25 comandos, 13 hooks, memoria persistente, Memory UI local, quality gates, evidence guard, continuidad operativa y modo autopilot.
Repo: 686f6c61/alfred-dev
Other skills on alfred-dev.
- /alfred
Alias global /alfred para abrir el asistente contextual de Alfred Dev sin escribir el namespace completo. Activar solo cuando el usuario invoque explicitamente /alfred.
Open skill - /choose-stack
Usar para evaluar y elegir tecnologías con matriz de decisión ponderada. Activar cuando el usuario quiera elegir tecnología, comparar frameworks, decidir entre alternativas técnicas, construir una matriz de decisión, evaluar stack, seleccionar base de datos, elegir lenguaje o
Open skill - /design-system
Usar para diseñar la arquitectura de un sistema con diagramas y contratos. Activar cuando el usuario quiera diseñar arquitectura, definir componentes del sistema, crear un diagrama de flujo, establecer contratos entre módulos, planificar la estructura del proyecto o decidir cómo
Open skill - /evaluate-dependencies
Usar para evaluar si una dependencia merece la pena antes de añadirla. Activar cuando el usuario quiera añadir una librería, saber si merece la pena esta dependencia, evaluar un paquete antes de instalarlo, hacer npm install o pip install de algo nuevo, buscar alternativas a una
Open skill - /write-adr
Usar para documentar decisiones arquitectónicas como ADR. Activar cuando el usuario quiera documentar por qué se tomó una decisión, registrar alternativas descartadas, crear un ADR, un decision record, dejar constancia de una elección técnica o justificar una decisión de diseño
Open skill - /code-review
Usar para revisar código con foco en calidad, legibilidad y errores lógicos. También: revisar código, buscar errores, calidad del código, revisión de PR, pull request review.
Open skill

