Skip to main content

Performance — Analyse incrémentale (D.2)

Niveau Intermédiaire
Temps de lecture ⏱ 8 min
mots 523
Sujets performancecache

Performance — Cache et analyse incrementale

Sommaire

  1. Vue d'ensemble
  2. Gains mesures
  3. Cache de fichiers
  4. Cache des regles compilees
  5. Securite du cache
  6. Desactivation

Vue d'ensemble

StaticCodeAudit utilise deux mecanismes complementaires pour accelerer les executions repetees sur un meme projet :

  1. Cache des regles compilees — les regles sont compilees une fois et reutilisees entre runs.
  2. 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.

Retour au sommaire


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

Retour au sommaire


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.

Retour au sommaire


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.

Retour au sommaire


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.

Retour au sommaire


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.

Retour au sommaire