- Add all process docs to mkdocs.yml nav (15 missing pages) - Replace relative links to files outside docs/ with absolute GitHub URLs - Add docs/audit/ directory (templates + reports) - Add validation config to allow unlisted audit reports as info-level
2.5 KiB
2.5 KiB
Rapport d'audit : Performance & Ressources
Release : 0.3.1 Date : 2026-04-10 Auditeur : claude-code
Score de compliance
| Metrique | Valeur |
|---|---|
| Items conformes | 10 / 13 |
| Score | 86 / 100 |
| Ecarts CRITICAL | 0 |
| Ecarts MAJOR | 0 |
| Ecarts MINOR | 3 |
| Ecarts INFO | 0 |
Ecarts constates
[MIN] Pas de mecanisme d'annulation/debounce sur les requetes API frontend
- Localisation :
frontend/src/shared/api/http.ts,frontend/src/features/analysis/store.ts - Constat :
apiFetchutilisefetch()brut sans supportAbortController. Les requetes de polling peuvent se chevaucher. - Regle violee : 12.2.3 — Les requetes API ont un mecanisme d'annulation ou de debounce
- Remediation : Ajouter le support
AbortControllerdansapiFetch.
[MIN] Logo de 879 KB non optimise
- Localisation :
frontend/src/assets/logo.png - Constat : Le logo fait 879 KB, excessif pour une image de logo (devrait etre < 50 KB).
- Regle violee : 12.2.5 — Les assets lourds sont optimises
- Remediation : Convertir en SVG ou WebP, ou compresser significativement.
[MIN] Nginx sans configuration de cache pour les fichiers statiques
- Localisation :
nginx.conf,frontend/nginx.conf - Constat : Aucune directive
expires,Cache-Controlouadd_header Cache-Controlpour les assets statiques. Vite produit des noms hashes qui sont safe a cacher agressivement. - Regle violee : 12.3.1 — Nginx a une configuration de cache pour les fichiers statiques
- Remediation : Ajouter
location ~* \.(js|css|png|svg|ico|woff2?)$ { expires 1y; add_header Cache-Control "public, immutable"; }
Points positifs
- Zero requete N+1 : queries optimisees avec JOIN, LIMIT/OFFSET
- Fichiers uploades correctement geres (persistants, nettoyes a la suppression avec protection path-traversal)
MAX_CONCURRENT_ANALYSESconfigure et respecte via semaphore asyncio- Conversion Docling correctement deplacee hors event loop via
asyncio.to_thread() - Upload en streaming (chunks de 64 KB)
- Watchers Vue automatiquement nettoyes par le lifecycle des composants
- Event listeners supprimes dans
onBeforeUnmount(mousemove, mouseup, ResizeObserver) - Polling avec
stopPolling()qui clear interval et timeout computedutilises correctement plutot que des fonctions dans les templates- Reponses API de taille raisonnable (
has_document_json: boolau lieu du blob complet) - Health check leger (
SELECT 1)