docling-studio/docs/audit/reports/release-0.3.1/12-performance.md
Pier-Jean Malandrino f6030bb2f1 fix(docs): resolve mkdocs strict mode build failure (#145)
- 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
2026-04-10 15:11:29 +02:00

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 : apiFetch utilise fetch() brut sans support AbortController. 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 AbortController dans apiFetch.

[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-Control ou add_header Cache-Control pour 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_ANALYSES configure 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
  • computed utilises correctement plutot que des fonctions dans les templates
  • Reponses API de taille raisonnable (has_document_json: bool au lieu du blob complet)
  • Health check leger (SELECT 1)

Verdict partiel : GO