Performance — Cache et analyse incrementale
Sommaire
- Vue d'ensemble
- Gains mesures
- Cache de fichiers
- Cache des regles compilees
- Securite du cache
- Desactivation
Vue d'ensemble
StaticCodeAudit utilise deux mecanismes complementaires pour accelerer les executions repetees sur un meme projet :
- Cache des regles compilees — les regles sont compilees une fois et reutilisees entre runs.
- Analyse incrementale par hash — chaque fichier est hashe en SHA-256 ; seuls les fichiers modifies sont reanalyses.
Le premier audit (cold) fait le travail complet. Les audits suivants (warm) reutilisent les resultats des fichiers inchanges.
Gains mesures
Mesures effectuees sur un projet de reference de 332 fichiers (FastAPI Python + JS + HTML).
| Run | Sans cache | Avec cache | Gain |
|---|---|---|---|
| Cold (premier audit, cache vide) | 15.07 s | 14.96 s | identique |
| Warm (cache complet, aucun fichier modifie) | 15.07 s | 4.27 s | -71.7 % |
| Modification d'un fichier | 15.07 s | 4.21 s | -72.0 % |
Repartition des phases (run warm)
| Phase | Sans cache | Avec cache | Gain |
|---|---|---|---|
| Chargement des regles | 0.04 s | < 0.1 s | identique |
| Verification du cache fichiers | n/a | < 0.1 s | nouveau |
| Scan des fichiers + regles | 14.99 s | 3.97 s | -73.5 % |
| Sauvegarde du cache | n/a | < 0.05 s | nouveau |
| Generation du rapport HTML | inchangee | inchangee | --- |
Statistiques de cache (run warm sur le projet de reference)
| Metrique | Valeur |
|---|---|
| Fichiers reutilises (cache hit) | 317 |
| Fichiers reanalyses (cache miss) | 15 |
| Taux de cache hit | 95.5 % |
| Taille du cache des regles | ~ 1.5 MB |
| Taille du cache des fichiers | ~ 200 KB |
Cache de fichiers
Chaque fichier scanne est associe a son hash SHA-256. Le cache est stocke localement dans .sca-cache/ a la racine du projet.
Au lancement, l'outil :
1. Calcule le hash SHA-256 de chaque fichier present dans paths.include.
2. Compare avec le hash enregistre lors du run precedent.
3. Si identique : reutilise les findings existants.
4. Si different ou absent : reanalyse le fichier.
Le SHA-256 du contenu (et non mtime) est utilise pour eviter les invalidations spurious lors d'un touch ou d'une modification de metadonnees.
Cache des regles compilees
Les regles .sca (builtin et custom) sont compilees une fois en regex et structures internes, puis serialisees dans le cache. Les runs suivants chargent directement la version compilee.
Le gain est modeste sur un audit unique (les regles ne sont pas le bottleneck), mais reste utile dans une CI ou le cache peut etre partage entre runs.
Securite du cache
Le cache est protege contre la falsification :
- HMAC-SHA256 — chaque entree du cache est signee. Une entree corrompue ou modifiee est detectee et rejetee.
- Ecriture atomique — fichier temporaire + rename, jamais d'ecriture partielle.
- Purge des entrees orphelines — les fichiers supprimes du projet sont automatiquement retires du cache.
Desactivation
Si vous souhaitez desactiver le cache (par exemple pour comparer une execution complete), trois variables d'environnement sont disponibles :
| Variable | Effet |
|---|---|
SCA_NO_CACHE=1 |
Desactive le cache des regles compilees |
SCA_NO_INCREMENTAL=1 |
Desactive l'analyse incrementale (rescanne tous les fichiers) |
SCA_NO_PARALLEL=1 |
Desactive la parallelisation eventuelle |
Vous pouvez aussi simplement supprimer le repertoire .sca-cache/ du projet pour repartir d'un cache vide.