Skip to main content

Guía de rendimiento

Un buen rendimiento mantiene el sistema ágil y reduce el costo de infraestructura. Estas prácticas ayudan a sacarle el máximo a Crono.

Compilación y despliegue

  • Compila en configuración Release.
  • Habilita compresión y HTTP/2 en el servidor web o el proxy inverso.
  • Usa una aplicación autocontenida por plataforma (ver Implementación y construcción).

Caché

Crono ofrece caché estática y de solicitud a través de ICacheAdministrador e ICacheSolicitud. Cachea los resultados costosos e invalídalos cuando cambien los datos subyacentes (ver Caché). En entornos multi-nodo, configura una caché distribuida (Redis) para que las entradas se compartan entre servidores.

Para páginas completas de visitantes anónimos, usa la caché de salida: declara las rutas cacheables con IRutaAlmacenableCacheProveedor y gestiona la invalidación con IControlVisualizacion / IMemoriaCacheSalidaInvalidacionObservador.

Acceso a datos

  • Prefiere la carga ansiosa (Include) para evitar el patrón N+1.
  • Para operaciones de solo lectura, consulta sin seguimiento (AsNoTracking()), y aprovecha la caché de segundo nivel (EntidadCacheable / ConCache()).
  • Para páginas de datos, usa AListaPaginada; para recorrer conjuntos muy grandes, PaginadorRapido (evita Skip().Take()).
  • En procesos largos por lotes, envuelve la unidad de trabajo en un DbContextoAmbito (sin autodetección de cambios, commit diferido) y reduce la importancia mínima de interceptores para no ejecutar interceptores Normal innecesarios (ver Interceptores).
  • Encapsula predicados en extensiones de consulta reutilizables (ver Búsqueda).

Recursos estáticos

Agrupa y minifica JavaScript y CSS en producción. El agrupador (bundler) emite nombres de archivo con hash, cacheables por CDN y navegadores durante largos periodos.

Perfilado y diagnóstico

Usa MiniProfiler para inspeccionar solicitudes lentas: el widget muestra las consultas ejecutadas y sus tiempos. Para medir bloques propios, usa ICronometro (ver Perfilado).

Consejos generales

  • Mantén el registro (logging) en nivel Information en producción y purga periódicamente las filas antiguas (ver Registro).
  • Usa APIs asíncronas en todo el flujo para liberar hilos.
  • Evita llamadas de red síncronas o E/S bloqueante dentro de los manejadores de solicitud.