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é