provisioning-outreach/presentations/rust-laspalmas-250926/info/css_src_public_plan.md

248 lines
7.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)