249 lines
7.4 KiB
Markdown
249 lines
7.4 KiB
Markdown
|
|
Tenemos otro problema:
|
|||
|
|
El CSS es muy largo y los SVG embebidos hacen la página muy larga
|
|||
|
|
¿ podríamos tener una versión src oara desarrollo y otra en public para produccion ?
|
|||
|
|
la de public o producción se podría generar desde los SRC y y comprimir el CSS al menos y los SVG o todo el HTML
|
|||
|
|
Alguna pruesta mejor y cómo implementarlo
|
|||
|
|
|
|||
|
|
⏺ Excelente observación sobre la optimización. Tienes razón, el CSS es muy largo y los SVGs embebidos aumentan considerablemente el tamaño
|
|||
|
|
del HTML. Déjame analizar las mejores opciones para un sistema de build eficiente.
|
|||
|
|
|
|||
|
|
Análisis del Problema
|
|||
|
|
|
|||
|
|
Tamaños actuales:
|
|||
|
|
|
|||
|
|
- poster.css: ~1000+ líneas con animaciones complejas
|
|||
|
|
- index.html: SVGs inline aumentan el tamaño considerablemente
|
|||
|
|
- Sin minificación: Espacios, comentarios, formato de desarrollo
|
|||
|
|
|
|||
|
|
Soluciones de Build/Optimización
|
|||
|
|
|
|||
|
|
1. Sistema Simple con Scripts (Sin Node/npm)
|
|||
|
|
|
|||
|
|
# Usando herramientas de línea de comandos
|
|||
|
|
|
|||
|
|
cssnano, html-minifier, svgo
|
|||
|
|
Pros: Simple, sin dependencias JavaScript
|
|||
|
|
Contras: Requiere instalar herramientas globalmente
|
|||
|
|
|
|||
|
|
1. Build con Nushell Scripts (Recomendado para tu stack)
|
|||
|
|
|
|||
|
|
# build.nu - Script Nushell para generar versión producción
|
|||
|
|
|
|||
|
|
def build-production [] {
|
|||
|
|
# Minificar CSS
|
|||
|
|
# Optimizar SVGs
|
|||
|
|
# Comprimir HTML
|
|||
|
|
}
|
|||
|
|
Pros: Consistente con tu stack Nushell
|
|||
|
|
Contras: Necesita escribir lógica personalizada
|
|||
|
|
|
|||
|
|
1. Vite/Parcel (Build Tool Moderno)
|
|||
|
|
|
|||
|
|
// vite.config.js
|
|||
|
|
export default {
|
|||
|
|
build: {
|
|||
|
|
minify: 'terser',
|
|||
|
|
cssCodeSplit: true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
Pros: Automatizado, HMR para desarrollo
|
|||
|
|
Contras: Añade Node.js al stack
|
|||
|
|
|
|||
|
|
1. GitHub Actions/CI Pipeline
|
|||
|
|
|
|||
|
|
# .github/workflows/build.yml
|
|||
|
|
|
|||
|
|
- uses: actions/setup-node@v3
|
|||
|
|
- run: npm run build
|
|||
|
|
- run: deploy to gh-pages
|
|||
|
|
Pros: Automatización completa
|
|||
|
|
Contras: Requiere configuración CI
|
|||
|
|
|
|||
|
|
Propuesta Recomendada: Sistema Híbrido
|
|||
|
|
|
|||
|
|
Estructura de Directorios:
|
|||
|
|
|
|||
|
|
poster/
|
|||
|
|
├── src/ # Desarrollo
|
|||
|
|
│ ├── index.html # HTML con comentarios
|
|||
|
|
│ ├── assets/
|
|||
|
|
│ │ ├── css/
|
|||
|
|
│ │ │ ├── poster.css # CSS sin minificar
|
|||
|
|
│ │ │ └── modules/ # CSS modular
|
|||
|
|
│ │ └── svg/
|
|||
|
|
│ │ ├── inline/ # SVGs para embeber
|
|||
|
|
│ │ └── external/ # SVGs externos
|
|||
|
|
│ └── components/ # HTML parciales
|
|||
|
|
│
|
|||
|
|
├── dist/ # Producción (generado)
|
|||
|
|
│ ├── index.html # Minificado
|
|||
|
|
│ ├── assets/
|
|||
|
|
│ │ ├── css/
|
|||
|
|
│ │ │ └── main.min.css # CSS combinado y minificado
|
|||
|
|
│ │ └── svg/
|
|||
|
|
│ │ └── sprites.svg # SVG optimizado
|
|||
|
|
│
|
|||
|
|
├── scripts/ # Scripts de build
|
|||
|
|
│ ├── build.nu # Script Nushell principal
|
|||
|
|
│ ├── optimize-svg.nu # Optimización SVG
|
|||
|
|
│ └── minify-css.nu # Minificación CSS
|
|||
|
|
│
|
|||
|
|
└── config/
|
|||
|
|
└── build.config.nu # Configuración de build
|
|||
|
|
|
|||
|
|
Estrategia de Optimización:
|
|||
|
|
|
|||
|
|
1. CSS Modularizado y Minificado
|
|||
|
|
|
|||
|
|
# src/assets/css/modules/
|
|||
|
|
|
|||
|
|
base.css # Reset y tipografía
|
|||
|
|
animations.css # Todas las animaciones
|
|||
|
|
components.css # Componentes UI
|
|||
|
|
patterns.css # Patrones y fondos
|
|||
|
|
|
|||
|
|
1. SVG Optimization Pipeline
|
|||
|
|
|
|||
|
|
- Desarrollo: SVGs legibles con comentarios
|
|||
|
|
- Producción:
|
|||
|
|
- SVGO para optimizar
|
|||
|
|
- Combinar en sprites
|
|||
|
|
- Data URIs para críticos
|
|||
|
|
- Lazy load para decorativos
|
|||
|
|
|
|||
|
|
1. HTML Processing
|
|||
|
|
|
|||
|
|
- Inline crítico: CSS/SVG above-the-fold
|
|||
|
|
- Defer no crítico: Carga asíncrona
|
|||
|
|
- Minificación: Eliminar espacios/comentarios
|
|||
|
|
|
|||
|
|
Herramientas y Comandos:
|
|||
|
|
|
|||
|
|
Opción A: Con Herramientas CLI
|
|||
|
|
|
|||
|
|
# Instalar herramientas
|
|||
|
|
|
|||
|
|
npm install -g cssnano svgo html-minifier terser
|
|||
|
|
|
|||
|
|
# Build script
|
|||
|
|
|
|||
|
|
svgo src/assets/svg/**/*.svg -o dist/assets/svg/
|
|||
|
|
cssnano src/assets/css/poster.css dist/assets/css/main.min.css
|
|||
|
|
html-minifier --minify-css --minify-js src/index.html -o dist/index.html
|
|||
|
|
|
|||
|
|
Opción B: Script Nushell Puro
|
|||
|
|
|
|||
|
|
# build.nu
|
|||
|
|
|
|||
|
|
def build [] {
|
|||
|
|
# Crear directorio dist
|
|||
|
|
mkdir dist dist/assets dist/assets/css dist/assets/svg
|
|||
|
|
|
|||
|
|
# Procesar CSS - eliminar comentarios y espacios
|
|||
|
|
open src/assets/css/poster.css
|
|||
|
|
| str replace -a '\/\*[\s\S]*?\*\/' '' # Eliminar comentarios
|
|||
|
|
| str replace -a '\n\s+' ' ' # Comprimir espacios
|
|||
|
|
| str replace -a ':\s+' ':' # Eliminar espacios después de :
|
|||
|
|
| str replace -a ';\s+' ';' # Eliminar espacios después de ;
|
|||
|
|
| save dist/assets/css/main.min.css
|
|||
|
|
|
|||
|
|
# Procesar HTML
|
|||
|
|
open src/index.html
|
|||
|
|
| str replace -a '<!--[\s\S]*?-->' '' # Eliminar comentarios HTML
|
|||
|
|
| str replace -a '\n\s+' ' ' # Comprimir espacios
|
|||
|
|
| save dist/index.html
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Optimizaciones Específicas:
|
|||
|
|
|
|||
|
|
1. Critical CSS Inline
|
|||
|
|
|
|||
|
|
<!-- dist/index.html -->
|
|||
|
|
<style>
|
|||
|
|
/* Solo CSS crítico inline (~10KB max) */
|
|||
|
|
.poster, .title, animaciones principales...
|
|||
|
|
</style>
|
|||
|
|
<link rel="preload" href="assets/css/decorative.css" as="style">
|
|||
|
|
|
|||
|
|
1. SVG Estrategia Híbrida
|
|||
|
|
|
|||
|
|
<!-- Crítico: Logo animado inline -->
|
|||
|
|
<svg id="critical-logo">...</svg>
|
|||
|
|
|
|||
|
|
<!-- No crítico: Carga diferida -->
|
|||
|
|
<link rel="prefetch" href="assets/svg/decorative.svg">
|
|||
|
|
|
|||
|
|
1. Compresión Adicional
|
|||
|
|
|
|||
|
|
- Brotli/Gzip: Para servidor
|
|||
|
|
- WebP: Para imágenes si las hay
|
|||
|
|
- Variable Fonts: Reducir requests de fuentes
|
|||
|
|
|
|||
|
|
Métricas de Optimización Esperadas:
|
|||
|
|
|
|||
|
|
| Archivo | Original | Minificado | Comprimido (gzip) |
|
|||
|
|
|---------|----------|------------|-------------------|
|
|||
|
|
| HTML | ~50KB | ~30KB | ~8KB |
|
|||
|
|
| CSS | ~40KB | ~25KB | ~6KB |
|
|||
|
|
| SVG | ~30KB | ~15KB | ~4KB |
|
|||
|
|
| Total | 120KB | 70KB | 18KB |
|
|||
|
|
|
|||
|
|
Workflow de Desarrollo:
|
|||
|
|
|
|||
|
|
1. Desarrollo: nu serve.nu - Servidor local con hot reload
|
|||
|
|
2. Build: nu build.nu - Genera versión optimizada
|
|||
|
|
3. Deploy: nu deploy.nu - Sube a producción
|
|||
|
|
|
|||
|
|
⏺ User approved Claude's plan:
|
|||
|
|
⎿ Plan de Optimización Build System
|
|||
|
|
|
|||
|
|
Estructura Propuesta:
|
|||
|
|
|
|||
|
|
poster/
|
|||
|
|
├── src/ # Código fuente (desarrollo)
|
|||
|
|
├── dist/ # Build optimizado (producción)
|
|||
|
|
└── scripts/ # Scripts de build
|
|||
|
|
|
|||
|
|
Implementación por Fases:
|
|||
|
|
|
|||
|
|
Fase 1: Reorganización de Archivos
|
|||
|
|
|
|||
|
|
1. Crear estructura src/ y mover archivos actuales
|
|||
|
|
2. Modularizar CSS en archivos más pequeños
|
|||
|
|
3. Separar SVGs por criticidad
|
|||
|
|
|
|||
|
|
Fase 2: Scripts de Build (Nushell)
|
|||
|
|
|
|||
|
|
1. build.nu - Script principal de build
|
|||
|
|
2. optimize-css.nu - Minificar y combinar CSS
|
|||
|
|
3. optimize-svg.nu - Comprimir SVGs con SVGO
|
|||
|
|
4. optimize-html.nu - Minificar HTML y inline crítico
|
|||
|
|
|
|||
|
|
Fase 3: Optimizaciones
|
|||
|
|
|
|||
|
|
1. CSS:
|
|||
|
|
- Eliminar comentarios y espacios
|
|||
|
|
- Combinar archivos modulares
|
|||
|
|
- Inline CSS crítico (~10KB)
|
|||
|
|
2. SVG:
|
|||
|
|
- Logo/texto animado: mantener inline (crítico)
|
|||
|
|
- Decorativos: mover a archivo externo
|
|||
|
|
- Comprimir con SVGO
|
|||
|
|
3. HTML:
|
|||
|
|
- Minificar estructura
|
|||
|
|
- Inline recursos críticos
|
|||
|
|
- Lazy load recursos no críticos
|
|||
|
|
|
|||
|
|
Fase 4: Automatización
|
|||
|
|
|
|||
|
|
1. Script dev.nu para desarrollo con watch
|
|||
|
|
2. Script build.nu para generar dist/
|
|||
|
|
3. Script serve.nu para preview de producción
|
|||
|
|
|
|||
|
|
Resultado Esperado:
|
|||
|
|
|
|||
|
|
- Reducción 40-60% del tamaño total
|
|||
|
|
- Desarrollo: Archivos legibles y organizados
|
|||
|
|
- Producción: Optimizado y minificado
|
|||
|
|
- Sin dependencias Node.js (usando Nushell)
|