Skip to main content

Rendimiento — Análisis incremental (D.2)

Nivel Intermedio
Tiempo de lectura ⏱ 8 min
palabras 496
Temas performancecache

Rendimiento — Análisis incremental

Resumen

StaticCodeAudit incorpora un caché incremental basado en el hash SHA-256 del contenido de los archivos. Una segunda auditoría sobre un proyecto sin cambios es del orden de 3 a 4 veces más rápida que una auditoría desde cero.

Configuración de referencia

Parámetro Valor
Máquina Apple M1 Pro
Núcleos 8
SO macOS Darwin 25.3.0 (arm64)

Proyecto de referencia

Parámetro Valor
Tipo FastAPI, Python + JS + HTML
Archivos analizables 332 archivos escaneados (676 archivos fuente antes de las exclusiones)

Métricas observadas

Métrica principal — duración total de la auditoría

Ejecución Sin caché Con caché Ganancia
Cold (primera auditoría, caché vacío) 15,07 s 14,96 s ≈ idéntico
Warm (caché completo, ningún archivo modificado) 15,07 s 4,27 s -71,7 %
Modificación de un archivo (touch) 15,07 s 4,21 s -72,0 %

Detalle de las fases (warm)

Fase Sin caché Con caché Ganancia
Carga de reglas 0,04 s < 0,1 s sin cambios
Verificación del caché de archivos n/d < 0,1 s nuevo
Escaneo de archivos y reglas 14,99 s 3,97 s -73,5 %
Guardado del caché de archivos n/d < 0,05 s nuevo
Generación del informe HTML sin cambios sin cambios

Estabilidad funcional

Los hallazgos detectados son estrictamente idénticos entre una ejecución sin caché y una ejecución con caché:

Métrica Sin caché Con caché Estado
Hallazgos CRITICAL 0 0 idéntico
Hallazgos HIGH 166 166 idéntico
Hallazgos MEDIUM 2090 2090 idéntico
Hallazgos LOW 984 984 idéntico
Hallazgos INFO 2 2 idéntico
Total hallazgos 3242 3242 idéntico

Ninguna regresión. El caché es transparente: usted obtiene los mismos resultados, más rápido.

Estadísticas del caché (ejecución warm)

Métrica Valor
Cache hits (archivos reutilizados) 317
Cache misses (archivos reanalizados) 15
Tasa de cache hit 95,5 %
Tamaño del caché de reglas 1,5 MB
Tamaño del caché de hashes de archivos ~ 200 KB

Cómo funciona

  • Cada archivo escaneado tiene su contenido marcado con SHA-256 y el resultado se guarda en el caché.
  • En la siguiente auditoría, si el hash es idéntico, los hallazgos del archivo se restauran desde el caché sin reanalizar el archivo.
  • El SHA-256 del contenido (en lugar del mtime) evita invalidaciones espurias al hacer un simple touch o al modificar metadatos.
  • El caché incluye una protección HMAC-SHA256 para detectar cualquier modificación accidental del archivo de caché.
  • Las entradas obsoletas (archivos eliminados del proyecto) se purgan automáticamente.

Desactivación

Si desea forzar una auditoría completa sin utilizar el caché, puede:

Método Efecto
SCA_NO_CACHE=1 ./staticcodeaudit-<plataforma> ... Desactiva el caché de reglas
SCA_NO_INCREMENTAL=1 ./staticcodeaudit-<plataforma> ... Desactiva el caché incremental de archivos
Eliminar el directorio .sca-cache/ del proyecto Reinicio completo del caché

Reproducción

# Vacíe el caché si existe
rm -rf /ruta/a/proyecto/.sca-cache

# Primera auditoría (cold)
./staticcodeaudit-<plataforma> /ruta/a/proyecto --lang=es

# Segunda auditoría (warm — debería ser mucho más rápida)
./staticcodeaudit-<plataforma> /ruta/a/proyecto --lang=es

Conclusión

  • Ganancia warm de -71,7 % en el proyecto de referencia
  • Cero regresión funcional (3242 hallazgos idénticos)
  • Caché seguro (HMAC, escritura atómica, purga de huérfanos)
  • Desactivable mediante variables de entorno o eliminación del caché