# 📸 ANÁLISIS DE MEDIOS SUPERFLUOS (Recursos Multimedia) **Fecha:** 2025-01-07 **Analista:** Ingeniero de Optimización y Mantenimiento **Versión del Proyecto:** 1.0.0 --- ## 📊 RESUMEN EJECUTIVO ### Estado Actual de Medios - **Archivos en `public/assets/`:** 50 archivos - **Archivos en `assets/`:** 3 archivos (imágenes grandes) - **Archivos en `dist/assets/`:** 87 archivos (duplicados) - **Carpetas de Videos Vacías:** 9 carpetas (0 archivos) - **Espacio Total en Assets:** ~36 MB (public: 8.3M, assets: 17M, dist: 11M) ### Espacio Recuperable Estimado | Categoría | Espacio Estimado | % del Total | Prioridad | |-----------|------------------|-------------|-----------| | **Imágenes No Optimizadas (>1MB)** | ~17 MB | 47% | 🔴 Alta | | **Archivos Duplicados (dist/assets/)** | 11 MB | 31% | 🔴 Alta | | **Carpetas Vacías (videos/)** | <100 KB | <0.3% | 🟢 Baja | | **Archivos con Nombres Mal Formateados** | ~1 MB | 3% | 🟡 Media | | **Archivos No Referenciados** | ~2-3 MB | 6-8% | 🟡 Media | | **Screenshots Vacías** | <10 KB | <0.1% | 🟢 Baja | **Total Recuperable:** ~30-32 MB (~83-89% del espacio total en assets) --- ## 📋 TABLA DE ACCIONES PRIORIZADAS - MEDIOS | Prioridad | Tipo | Archivo/Ruta | Problema | Acción Recomendada | Espacio | Riesgo | |-----------|------|--------------|----------|-------------------|---------|---------| | **🔴 ALTA** | Imágenes No Optimizadas | `assets/images/bloque_00/*.png` | 3 imágenes >5MB sin optimizar | Optimizar a WebP o comprimir PNG | ~17 MB | 🟢 Bajo | | **🔴 ALTA** | Assets Duplicados | `dist/assets/` | Duplicación completa de public/assets | Eliminar (se regenera en build) | 11 MB | 🟢 Bajo | | **🟡 MEDIA** | Archivos con Espacios | `seleccion-talla-collarin 2.png` | Nombres con espacios (4 archivos) | Renombrar sin espacios | ~1 MB | 🟡 Medio | | **🟡 MEDIA** | Archivos Referenciados No Existentes | `bloque-4-rcp/` (vacía) | JSON referencia imágenes que no existen | Verificar y añadir o eliminar referencias | - | 🟡 Medio | | **🟡 MEDIA** | Imágenes Duplicadas | `tabla_rangos_fio2_oxigenoterapia1.png` | Variantes duplicadas (`1.png`) | Verificar si son necesarias, eliminar duplicados | ~500 KB | 🟡 Medio | | **🟡 MEDIA** | Carpeta Assets Separada | `assets/images/` vs `public/assets/` | Estructura duplicada confusa | Consolidar en `public/assets/` | - | 🟡 Medio | | **🟢 BAJA** | Carpetas Vacías | `assets/videos/bloque_*` (9 vacías) | Carpetas de videos sin contenido | Eliminar o documentar propósito | <100 KB | 🟢 Bajo | | **🟢 BAJA** | Screenshots Vacías | `public/screenshots/` | Carpeta vacía | Eliminar o usar | <10 KB | 🟢 Bajo | | **🟢 BAJA** | Assets de Prueba | `placeholder.svg` (múltiples) | Placeholders duplicados | Consolidar en un solo lugar | <10 KB | 🟢 Bajo | --- ## 🔍 ANÁLISIS DETALLADO POR CATEGORÍA ### 1. IMÁGENES NO OPTIMIZADAS (🔴 CRÍTICO) #### Problema: Imágenes Muy Grandes **Archivos Identificados:** ```bash assets/images/bloque_00/el_orden_importa_mas_que_la_velocidad.png # 5.7 MB assets/images/bloque_00/priorizacion_vital_el_enfoque_abcde.png # 5.8 MB assets/images/bloque_00/sistema_abcde_prioridades_emergencias.png # 5.4 MB ``` **Total:** ~17 MB en solo 3 imágenes **Problemas:** - ❌ Tamaño excesivo para web (deberían ser <500KB) - ❌ Sin compresión - ❌ Formato PNG no optimizado (debería ser WebP) - ❌ Nombres con espacios (problemas de compatibilidad) - ❌ No están en `public/assets/` (ubicación incorrecta) **Acción Recomendada:** ```bash # 1. Optimizar imágenes usando ImageMagick o similar # Instalar herramientas: # sudo apt-get install imagemagick webp # 2. Optimizar y convertir a WebP: for img in assets/images/bloque_00/*.png; do # Redimensionar si es necesario (max width 1920px) convert "$img" -resize 1920x1920> -quality 85 "${img.png}.webp" # Comprimir PNG original como backup pngquant --quality=65-80 "$img" --output "${img.png}optimized.png" done # 3. Renombrar sin espacios: # "el_orden_importa_mas_que_la_velocidad.png" -> "el_orden_importa_mas_que_la_velocidad.png" # "priorizacion_vital_el_enfoque_abcde.png" -> "priorizacion_vital_enfoque_abcde.png" # "sistema_abcde_prioridades_emergencias.png" -> "sistema_abcde_prioridades_emergencias.png" # 4. Mover a public/assets/infografias/bloque-0-fundamentos/ # 5. Actualizar referencias en image-registry.ts ``` **Script de Optimización Automática:** ```bash #!/bin/bash # scripts/optimize-images.sh echo "🖼️ Optimizando imágenes..." # Directorio de trabajo SRC_DIR="assets/images/bloque_00" DEST_DIR="public/assets/infografias/bloque-0-fundamentos" # Crear destino si no existe mkdir -p "$DEST_DIR" # Optimizar cada PNG for img in "$SRC_DIR"/*.png; do if [ -f "$img" ]; then filename=$(basename "$img" .png) # Limpiar nombre (sin espacios, minúsculas, sin caracteres especiales) clean_name=$(echo "$filename" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -d ':' | sed 's/[^a-z0-9-]//g') echo " 📸 Optimizando: $filename -> $clean_name.webp" # Convertir a WebP con compresión convert "$img" -resize 1920x1920> -quality 85 "$DEST_DIR/$clean_name.webp" 2>/dev/null # También crear versión PNG optimizada como fallback pngquant --quality=65-80 "$img" --output "$DEST_DIR/$clean_name_optimized.png" 2>/dev/null || \ convert "$img" -resize 1920x1920> -quality 85 "$DEST_DIR/$clean_name_optimized.png" fi done echo "✅ Optimización completada" echo "📊 Espacio recuperado: ~15 MB" ``` **Ahorro Estimado:** ~15 MB (de 17 MB a ~2 MB) **Riesgo:** 🟢 Bajo - Solo optimización, no elimina contenido --- ### 2. ASSETS DUPLICADOS (🔴 CRÍTICO) #### Problema: Carpeta `dist/assets/` Duplicada **Análisis:** - `public/assets/`: 50 archivos (8.3 MB) ✅ **Fuente correcta** - `dist/assets/`: 87 archivos (11 MB) ❌ **Duplicado generado en build** **Problemas:** - ❌ `dist/` debe estar en `.gitignore` (ya está, pero el contenido existe) - ❌ Duplicación innecesaria en repositorio - ❌ Genera conflictos si se editan archivos en `dist/` **Acción:** ```bash # Eliminar dist/assets/ (se regenera automáticamente en build) rm -rf dist/assets/ # Verificar que dist/ está en .gitignore: grep -q "^dist/" .gitignore || echo "dist/" >> .gitignore ``` **Ahorro Estimado:** 11 MB **Riesgo:** 🟢 Bajo - `dist/` se regenera en build --- ### 3. ARCHIVOS CON NOMBRES MAL FORMATEADOS (🟡 MEDIA) #### Problema: Archivos con Espacios y Caracteres Especiales **Archivos Identificados:** ```bash public/assets/infografias/bloque-2-inmovilizacion/seleccion-talla-collarin 2.png public/assets/infografias/bloque-2-inmovilizacion/tecnica-sujecion-manual 1.png public/assets/infografias/bloque-2-inmovilizacion/componentes-sistema-inmovilizacion 1.png public/assets/infografias/bloque-2-inmovilizacion/posicion-tes-inmovilizacion-manual 1.png ``` **Problemas:** - ❌ Espacios en nombres (problemas en URLs y scripts) - ❌ Números sueltos (` 2.png`, ` 1.png`) sugieren duplicados - ❌ Posibles versiones de backup **Acción:** ```bash # Script para renombrar archivos con espacios find public/assets -type f -name "* *" -exec rename 's/ /-/g' {} \; # O manualmente: mv "public/assets/infografias/bloque-2-inmovilizacion/seleccion-talla-collarin 2.png" \ "public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_2.png" # Actualizar referencias en: # - src/data/image-registry.ts # - src/pages/GaleriaImagenes.tsx # - src/data/guia-refuerzo-rcp-adulto-svb.json (si aplica) ``` **Verificar si son Duplicados:** ```bash # Comparar con archivos sin número: for file in public/assets/infografias/bloque-2-inmovilizacion/*" "*; do base=$(echo "$file" | sed 's/ [0-9]//g') if [ -f "$base" ]; then echo "⚠️ Posible duplicado: $file vs $base" # Comparar con diff o checksum diff "$file" "$base" || echo " → Archivos diferentes, mantener ambos con nombres distintos" fi done ``` **Ahorro Estimado:** ~1 MB (si se eliminan duplicados confirmados) **Riesgo:** 🟡 Medio - Verificar que no se usan antes de eliminar --- ### 4. ARCHIVOS REFERENCIADOS NO EXISTENTES (🟡 MEDIA) #### Problema: Referencias a Imágenes que No Existen **Carpeta Vacía Identificada:** ```bash public/assets/infografias/bloque-4-rcp/ # VACÍA ``` **Referencias en Código:** ```json // src/data/guia-refuerzo-rcp-adulto-svb.json { "ruta": "/assets/infografias/bloque-4-rcp/algoritmo_rcp_comentado.svg", // ❌ NO EXISTE "ruta": "/assets/infografias/bloque-4-rcp/compresiones_incorrectas.png", // ❌ NO EXISTE "ruta": "/assets/infografias/bloque-4-rcp/compresiones_correctas.png", // ❌ NO EXISTE "ruta": "/assets/infografias/bloque-4-rcp/descompresion_incompleta.png", // ❌ NO EXISTE "ruta": "/assets/infografias/bloque-4-rcp/descompresion_completa.png", // ❌ NO EXISTE "ruta": "/assets/infografias/bloque-4-rcp/resumen_rcp_adulto_svb.png", // ❌ NO EXISTE } ``` **Problemas:** - ❌ 6 imágenes referenciadas que no existen - ❌ Rutas rotas en el frontend - ❌ Carpetas vacías confusas **Acción:** **Opción 1: Crear las imágenes faltantes** (si son necesarias) ```bash # Si las imágenes están planificadas pero no creadas aún: mkdir -p public/assets/infografias/bloque-4-rcp # Añadir .gitkeep para mantener la carpeta: touch public/assets/infografias/bloque-4-rcp/.gitkeep ``` **Opción 2: Eliminar referencias** (si no son necesarias aún) ```bash # Comentar o eliminar referencias en: # - src/data/guia-refuerzo-rcp-adulto-svb.json # Actualizar código para manejar imágenes faltantes gracefully ``` **Opción 3: Añadir imágenes placeholder** (temporal) ```bash # Crear placeholders hasta que existan las reales: for img in algoritmo-rcp-comentado compresiones-incorrectas compresiones-correctas \ descompresion-incompleta descompresion-completa resumen-rcp-adulto-svb; do convert -size 800x600 xc:lightgray -pointsize 24 -fill black \ -gravity center -annotate +0+0 "Placeholder: $img" \ "public/assets/infografias/bloque-4-rcp/$img.png" done ``` **Recomendación:** Verificar con el equipo si estas imágenes están planificadas o si deben eliminarse las referencias. **Riesgo:** 🟡 Medio - Puede romper funcionalidad si se eliminan referencias activas --- ### 5. IMÁGENES DUPLICADAS O VARIANTES (🟡 MEDIA) #### Problema: Archivos con Sufijos Numerados **Archivos Identificados:** ```bash tabla_rangos_fio2_oxigenoterapia.png # Original tabla_rangos_fio2_oxigenoterapia1.png # Variante con "1" ❓ seleccion_talla_collarin_cervical.png # Original seleccion_talla_collarin_cervical1.png # Variante con "1" ❓ seleccion-talla-collarin 2.png # Variante con " 2" ❓ componentes_sistema_inmovilizacion.png # Original componentes-sistema-inmovilizacion 1.png # Variante con " 1" ❓ posicion_tes_inmovilizacion_manual.png # Original posicion-tes-inmovilizacion-manual 1.png # Variante con " 1" ❓ ``` **Acción:** ```bash # Script para identificar duplicados exactos: find public/assets -type f -name "*1.png" -o -name "* 2.png" -o -name "* 1.png" | while read file; do base=$(echo "$file" | sed 's/[ 0-9]*\.png$/.png/') if [ -f "$base" ]; then # Comparar checksums if [ "$(md5sum "$file" | cut -d' ' -f1)" == "$(md5sum "$base" | cut -d' ' -f1)" ]; then echo "✅ DUPLICADO EXACTO: $file (igual que $base)" echo " → Eliminar: rm '$file'" else echo "⚠️ VARIANTE DIFERENTE: $file vs $base" echo " → Revisar manualmente si ambas son necesarias" fi fi done ``` **Recomendación:** 1. Comparar checksums para identificar duplicados exactos 2. Si son iguales, eliminar variantes numeradas 3. Si son diferentes, renombrar con nombres descriptivos 4. Actualizar referencias en código **Ahorro Estimado:** ~500 KB - 1 MB (si se eliminan duplicados) **Riesgo:** 🟡 Medio - Verificar que no se usan antes de eliminar --- ### 6. ESTRUCTURA DE ASSETS CONFUSA (🟡 MEDIA) #### Problema: Múltiples Ubicaciones para Assets **Estructura Actual:** ```bash assets/images/bloque_00/ # 3 imágenes grandes (17 MB) ❌ Ubicación incorrecta public/assets/infografias/ # 50 archivos (8.3 MB) ✅ Ubicación correcta dist/assets/ # 87 archivos (11 MB) ❌ Generado en build assets/videos/bloque_*/ # 9 carpetas vacías ❌ assets/slides/bloque_*/ # Carpetas posiblemente vacías ❓ assets/templates/ # Carpeta vacía ❌ assets/checklists_app/ # Carpeta vacía ❌ ``` **Problemas:** - ❌ Assets en `assets/images/` no se sirven correctamente (deben estar en `public/`) - ❌ Estructura duplicada confusa - ❌ Carpetas vacías sin propósito claro **Acción Recomendada:** **Consolidar en `public/assets/`:** ```bash # Estructura recomendada: public/assets/ ├── infografias/ # Infografías por bloque (actual) ├── images/ # Imágenes generales (si necesario) ├── videos/ # Videos (cuando se añadan) ├── icons/ # Iconos └── slides/ # Presentaciones (si necesario) # Mover imágenes de assets/images/ a public/assets/images/ mkdir -p public/assets/images/bloque-0-fundamentos mv assets/images/bloque_00/*.png public/assets/images/bloque-0-fundamentos/ # Eliminar estructura antigua después de verificar: # rm -rf assets/images/ ``` **Ahorro Estimado:** ~17 MB (moviendo y optimizando imágenes grandes) **Riesgo:** 🟡 Medio - Actualizar todas las referencias en código --- ### 7. CARPETAS VACÍAS (🟢 BAJA) #### Problema: Carpetas de Videos Sin Contenido **Carpetas Vacías Identificadas:** ```bash assets/videos/bloque_00/ # Vacía assets/videos/bloque_01/ # Vacía assets/videos/bloque_02/ # Vacía assets/videos/bloque_03/ # Vacía assets/videos/bloque_04/ # Vacía assets/videos/bloque_05/ # Vacía assets/videos/bloque_06/ # Vacía assets/videos/bloque_07/ # Vacía assets/videos/bloque_08/ # Vacía assets/slides/bloque_00/ # Vacía (posiblemente) assets/slides/bloque_01/ # Vacía (posiblemente) # ... más carpetas slides posiblemente vacías assets/templates/ # Vacía assets/checklists_app/ # Vacía public/screenshots/ # Vacía ``` **Acción:** **Opción 1: Eliminar si no se usarán** ```bash # Eliminar carpetas vacías: find assets/videos -type d -empty -delete find assets/slides -type d -empty -delete find assets -type d -empty -not -path "./assets/*/.*" -delete rmdir public/screenshots 2>/dev/null || true ``` **Opción 2: Añadir .gitkeep si se usarán en el futuro** ```bash # Mantener estructura pero documentar que está vacía: for dir in assets/videos/bloque_* assets/slides/bloque_*; do if [ -d "$dir" ] && [ -z "$(ls -A "$dir")" ]; then echo "# Carpeta para videos/slides del bloque (futuro)" > "$dir/.gitkeep" fi done ``` **Ahorro Estimado:** <100 KB (solo estructura de directorios) **Riesgo:** 🟢 Bajo - Carpetas vacías no afectan funcionalidad --- ### 8. ARCHIVOS NO REFERENCIADOS (🟡 MEDIA) #### Problema: Assets Sin Referencias en Código **Método de Detección:** ```bash # Buscar todas las imágenes en public/assets/ find public/assets -type f \( -name "*.png" -o -name "*.svg" -o -name "*.jpg" \) | while read img; do filename=$(basename "$img") path_in_code="/assets/infografias/$(echo "$img" | sed 's|.*/infografias/||')" # Buscar referencia en código if ! grep -r "$path_in_code\|$filename" src/ backend/ public/ --include="*.ts" --include="*.tsx" --include="*.js" --include="*.json" --include="*.md" >/dev/null 2>&1; then echo "⚠️ NO REFERENCIADO: $img" fi done ``` **Acción:** 1. Ejecutar script de detección 2. Verificar manualmente cada archivo no referenciado 3. Si no se usan, mover a `assets/archive/` (temporalmente) 4. Eliminar después de confirmar que no son necesarios **Ahorro Estimado:** ~2-3 MB (estimado conservador) **Riesgo:** 🟡 Medio - Verificar que no se usan dinámicamente o en Markdown --- ## 🛠️ COMANDOS ESPECÍFICOS PARA LIMPIEZA DE MEDIOS ### 1. Identificar Imágenes Grandes No Optimizadas ```bash # Buscar imágenes > 1MB: find public/assets assets -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" \) \ -size +1M -exec ls -lh {} \; | awk '{print $5, $9}' | sort -hr # Buscar imágenes > 500KB: find public/assets assets -type f \( -name "*.png" -o -name "*.jpg" \) \ -size +500k -exec ls -lh {} \; | awk '{print $5, $9}' ``` --- ### 2. Detectar Duplicados Exactos ```bash # Usar fdupes o script personalizado: # Instalar fdupes: # sudo apt-get install fdupes # Buscar duplicados en assets: fdupes -r public/assets/ # O usar script MD5: find public/assets -type f \( -name "*.png" -o -name "*.jpg" \) -exec md5sum {} \; | \ sort | uniq -d -w 32 ``` --- ### 3. Encontrar Archivos No Referenciados ```bash #!/bin/bash # scripts/find-unused-assets.sh echo "🔍 Buscando assets no referenciados..." find public/assets -type f \( -name "*.png" -o -name "*.svg" -o -name "*.jpg" \) | while read asset; do # Obtener ruta relativa desde public/ rel_path="/assets/$(echo "$asset" | sed 's|.*public/assets/||')" filename=$(basename "$asset") # Buscar en código fuente found=$(grep -r "$rel_path\|$filename" src/ backend/ public/ \ --include="*.ts" --include="*.tsx" --include="*.js" --include="*.json" --include="*.md" \ 2>/dev/null | wc -l) if [ "$found" -eq 0 ]; then echo "⚠️ NO REFERENCIADO: $asset" fi done echo "✅ Búsqueda completada" ``` --- ### 4. Optimizar Todas las Imágenes ```bash #!/bin/bash # scripts/optimize-all-images.sh echo "🖼️ Optimizando todas las imágenes..." # Requiere: imagemagick, webp, pngquant # sudo apt-get install imagemagick webp pngquant # Optimizar PNGs en public/assets/ find public/assets -type f -name "*.png" | while read img; do echo " 📸 Optimizando: $img" # Crear backup cp "$img" "${img}.backup" # Optimizar PNG pngquant --quality=65-80 --ext .png --force "$img" 2>/dev/null || \ convert "$img" -quality 85 -strip "$img" # Crear versión WebP convert "$img" -quality 85 "${img.png}.webp" 2>/dev/null done echo "✅ Optimización completada" ``` --- ### 5. Renombrar Archivos con Espacios ```bash #!/bin/bash # scripts/fix-asset-names.sh echo "🔤 Renombrando archivos con espacios..." find public/assets -type f -name "* *" | while read file; do # Renombrar: espacios -> guiones, minúsculas newname=$(echo "$file" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed 's/[^a-z0-9-._\/]//g') if [ "$file" != "$newname" ]; then echo " 📝 Renombrando: $(basename "$file") -> $(basename "$newname")" mv "$file" "$newname" # Actualizar referencias en código (requiere confirmación) echo " ⚠️ Actualizar referencias en código para: $file" fi done echo "✅ Renombrado completado" echo "📋 Recuerda actualizar referencias en:" echo " - src/data/image-registry.ts" echo " - src/pages/GaleriaImagenes.tsx" echo " - src/data/guia-refuerzo-rcp-adulto-svb.json" ``` --- ### 6. Limpiar Assets Duplicados y Vacíos ```bash #!/bin/bash # scripts/cleanup-assets.sh echo "🧹 Limpiando assets..." # 1. Eliminar dist/assets/ (se regenera) if [ -d "dist/assets" ]; then echo " 🗑️ Eliminando dist/assets/..." rm -rf dist/assets/ echo " ✅ dist/assets/ eliminado (11 MB recuperados)" fi # 2. Eliminar carpetas vacías echo " 🗑️ Eliminando carpetas vacías..." EMPTY_DIRS=$(find assets public/assets -type d -empty 2>/dev/null | wc -l) find assets public/assets -type d -empty -delete 2>/dev/null echo " ✅ $EMPTY_DIRS carpeta(s) vacía(s) eliminada(s)" # 3. Eliminar screenshots vacías if [ -d "public/screenshots" ] && [ -z "$(ls -A public/screenshots)" ]; then echo " 🗑️ Eliminando public/screenshots/ (vacía)..." rmdir public/screenshots echo " ✅ public/screenshots/ eliminada" fi echo "✅ Limpieza completada" ``` --- ## 📝 VERIFICACIÓN DE REFERENCIAS ### Imágenes Registradas en `image-registry.ts` **Total Registradas:** ~25 imágenes **Verificar Existencia:** ```bash # Script para verificar que todas las imágenes registradas existen: node -e " const { imageRegistry } = require('./src/data/image-registry.ts'); const fs = require('fs'); Object.values(imageRegistry).forEach(img => { const publicPath = 'public' + img.path; if (!fs.existsSync(publicPath)) { console.log('❌ NO EXISTE:', publicPath); } else { const stats = fs.statSync(publicPath); if (stats.size > 500000) { console.log('⚠️ GRANDE (>500KB):', publicPath, '(' + (stats.size/1024/1024).toFixed(2) + ' MB)'); } } }); " ``` --- ### Imágenes en `GaleriaImagenes.tsx` **Total Listadas:** ~60 imágenes **Verificar Existencia:** ```bash # Extraer todas las rutas de GaleriaImagenes.tsx y verificar: grep -o "'/assets/[^']*'" src/pages/GaleriaImagenes.tsx | \ sed "s/'//g" | while read path; do if [ ! -f "public$path" ]; then echo "❌ NO EXISTE: public$path" fi done ``` --- ## 🔧 OPTIMIZACIÓN DE ASSETS ### 1. Compresión de Imágenes **Estrategia Recomendada:** | Tipo | Formato Original | Formato Optimizado | Calidad | Ahorro Estimado | |------|------------------|-------------------|---------|-----------------| | **Fotografías** | PNG/JPG | WebP | 85% | 60-80% | | **Iconos/Logos** | PNG/SVG | SVG (vectorial) o WebP | 90% | 70-90% | | **Infografías** | PNG | WebP o SVG | 85% | 50-70% | | **Diagramas** | PNG | SVG (si es posible) | 100% | 80-95% | **Herramientas Recomendadas:** - `sharp` (Node.js) - Mejor rendimiento - `imagemagick` (CLI) - Versátil - `pngquant` - Específico para PNG - `svgo` - Optimización SVG --- ### 2. Lazy Loading de Imágenes **Implementar en `MarkdownViewer.tsx`:** ```tsx // src/components/content/MarkdownViewer.tsx img: ({ node, src, alt, ...props }: any) => { // Añadir loading="lazy" para imágenes fuera del viewport return ( {alt ); } ``` --- ### 3. Responsive Images **Implementar srcset para diferentes tamaños:** ```tsx // Para imágenes grandes, generar múltiples tamaños: Descripción ``` --- ## 📊 RESUMEN DE ESPACIO RECUPERABLE ### Por Prioridad | Prioridad | Acción | Espacio | Esfuerzo | ROI | |-----------|--------|---------|----------|-----| | **🔴 ALTA** | Optimizar imágenes >5MB | ~15 MB | 2 horas | ⭐⭐⭐⭐⭐ | | **🔴 ALTA** | Eliminar dist/assets/ | 11 MB | 5 min | ⭐⭐⭐⭐⭐ | | **🟡 MEDIA** | Consolidar estructura | - | 1 hora | ⭐⭐⭐⭐ | | **🟡 MEDIA** | Renombrar archivos espacios | - | 30 min | ⭐⭐⭐ | | **🟡 MEDIA** | Eliminar duplicados | ~1 MB | 1 hora | ⭐⭐⭐ | | **🟡 MEDIA** | Eliminar no referenciados | ~2-3 MB | 2 horas | ⭐⭐⭐ | | **🟢 BAJA** | Eliminar carpetas vacías | <100 KB | 5 min | ⭐⭐ | **Total Recuperable:** ~30-32 MB **Tiempo Total:** ~7 horas **ROI General:** ⭐⭐⭐⭐⭐ (Muy Alto) --- ## ✅ CHECKLIST DE LIMPIEZA DE MEDIOS ### Fase 1: Crítico (Hacer YA) - [ ] Optimizar 3 imágenes grandes en `assets/images/bloque_00/` (>5MB cada una) - [ ] Eliminar `dist/assets/` del repositorio (11 MB) - [ ] Verificar que `dist/` está en `.gitignore` - [ ] Mover imágenes optimizadas a `public/assets/infografias/` **Tiempo:** 2-3 horas **Ahorro:** ~26 MB --- ### Fase 2: Importante (Hacer Pronto) - [ ] Renombrar archivos con espacios (4 archivos) - [ ] Verificar y eliminar duplicados exactos - [ ] Consolidar estructura de assets (mover de `assets/` a `public/assets/`) - [ ] Verificar referencias a imágenes faltantes en `bloque-4-rcp/` - [ ] Actualizar `image-registry.ts` con nuevas rutas **Tiempo:** 3-4 horas **Ahorro:** ~3-4 MB --- ### Fase 3: Opcional (Hacer Cuando Tengas Tiempo) - [ ] Detectar y eliminar assets no referenciados - [ ] Eliminar carpetas vacías de videos/slides - [ ] Implementar lazy loading para imágenes - [ ] Generar versiones responsive (srcset) - [ ] Convertir PNGs a WebP donde sea posible **Tiempo:** 2-3 horas **Ahorro:** ~2-3 MB adicionales --- ## 🎯 RECOMENDACIONES FINALES ### Prioridades Inmediatas 1. **🔴 Optimizar Imágenes Grandes** (17 MB → ~2 MB) - Convertir a WebP - Comprimir PNGs - Redimensionar si es necesario - **ROI:** ⭐⭐⭐⭐⭐ (Muy Alto) 2. **🔴 Eliminar dist/assets/** (11 MB) - Ya está en `.gitignore` pero existe en repo - Se regenera en build - **ROI:** ⭐⭐⭐⭐⭐ (Inmediato) 3. **🟡 Consolidar Estructura** - Mover `assets/images/` → `public/assets/images/` - Eliminar carpetas vacías - **ROI:** ⭐⭐⭐⭐ (Alto - organización) --- ### Scripts Creados 1. ✅ `scripts/optimize-images.sh` - Optimizar imágenes grandes 2. ✅ `scripts/fix-asset-names.sh` - Renombrar archivos con espacios 3. ✅ `scripts/cleanup-assets.sh` - Limpiar duplicados y vacíos 4. ✅ `scripts/find-unused-assets.sh` - Detectar assets no usados --- ## 📋 TABLA COMPARATIVA: ANTES vs DESPUÉS | Métrica | Antes | Después | Mejora | |---------|-------|---------|--------| | **Tamaño Total Assets** | ~36 MB | ~4-6 MB | **-83%** | | **Imágenes >1MB** | 3 archivos (17 MB) | 0 archivos | **-100%** | | **Archivos Duplicados** | 87 en dist/ | 0 | **-100%** | | **Archivos con Espacios** | 4 archivos | 0 | **-100%** | | **Carpetas Vacías** | 12+ carpetas | 0-2 (con .gitkeep) | **-83%** | | **Tiempo de Carga (estimado)** | ~3-5s | ~0.5-1s | **-80%** | --- **Última actualización:** 2025-01-07 **Próxima revisión recomendada:** Mensual o antes de cada release mayor