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ónN+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(evitaSkip().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 interceptoresNormalinnecesarios (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
Informationen 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.