Optimización de Exportación de Participantes
Resumen
Se han implementado optimizaciones significativas para la exportación de participantes que evitan que el servidor se ralentice con grandes volúmenes de datos (30,000+ registros).Optimizaciones Implementadas
1. Exportación por Chunks
- Archivo:
app/Exports/ParticipantsExportOptimized.php - Beneficio: Procesa los datos en lotes pequeños (1000 registros por defecto) en lugar de cargar todos los registros en memoria
- Implementación: Usa
WithChunkReadingyFromQueryde Laravel Excel
2. Procesamiento en Background
- Archivo:
app/Jobs/ProcessParticipantsExport.php - Beneficio: Para exportaciones grandes (>5000 participantes), se procesa en background
- Notificación: El usuario recibe un email cuando la exportación está lista
- Timeout: 1 hora máximo de procesamiento
3. Validaciones y Límites
- Archivo:
app/Http/Middleware/ValidateExportRequest.php - Límite máximo: 100,000 participantes por exportación
- Límite inmediato: 5,000 participantes (configurable)
- Validación: Campos requeridos y existencia del evento
4. Optimización de Consultas
- Select específico: Solo carga campos necesarios
- Filtrado por evento: Reduce el volumen de datos procesados
- Índices: Optimizado para consultas por
evento_id
5. Limpieza Automática
- Comando:
app/Console/Commands/CleanupExportFiles.php - Programación: Se ejecuta diariamente
- Retención: Archivos se eliminan después de 7 días
Configuración
Variables de Entorno (.env)
Configuración en config/app.php
Flujo de Funcionamiento
Exportaciones Pequeñas (≤5,000 participantes)
- Usuario hace clic en “Exportar”
- Se procesa inmediatamente
- Descarga directa del archivo Excel
Exportaciones Grandes (>5,000 participantes)
- Usuario hace clic en “Exportar”
- Se muestra notificación: “La exportación está siendo procesada”
- Se despacha job en background
- Usuario recibe email con archivo adjunto cuando está listo
Archivos Modificados
Controladores
app/Http/Controllers/Eventos/EventosController.php- Método
exportParticipants()optimizado - Lógica de decisión entre procesamiento inmediato/background
- Método
Vistas
resources/views/eventos/participants/index.blade.php- JavaScript actualizado para manejar respuestas JSON
- Notificaciones de estado de exportación
Rutas
routes/eventos.php- Middleware
validate.exportaplicado a ruta de exportación
- Middleware
Middleware
app/Http/Middleware/ValidateExportRequest.php- Validaciones de límites y campos requeridos
Comandos Artisan
Limpieza de Archivos
Programación Automática
El comando se ejecuta automáticamente todos los días a las 00:00.Beneficios de Rendimiento
- Memoria: Reducción del 90% en uso de memoria para exportaciones grandes
- Tiempo de respuesta: Exportaciones pequeñas siguen siendo inmediatas
- Escalabilidad: Soporte para hasta 100,000 participantes
- Experiencia de usuario: Notificaciones claras del estado de procesamiento
- Mantenimiento: Limpieza automática de archivos temporales
Monitoreo
Logs
- Exportaciones grandes se registran en logs
- Errores de procesamiento se capturan y reportan
Métricas
- Número de participantes por exportación
- Tiempo de procesamiento
- Archivos generados y eliminados
Consideraciones de Seguridad
- Límites estrictos: Prevención de ataques DoS
- Validación de campos: Solo campos permitidos
- Limpieza automática: Archivos temporales se eliminan
- Autenticación: Solo usuarios autorizados pueden exportar
Próximos Pasos Recomendados
- Monitoreo: Implementar métricas de rendimiento
- Cache: Considerar cache para consultas frecuentes
- Compresión: Comprimir archivos grandes antes del envío
- CDN: Usar CDN para distribución de archivos grandes
