Files
VacatureRadar/docs/audit/PERFORMANCE.md
T
Jens a4a71ebc23
deploy / deploy (push) Canceled after 0s
fix: harden production release deployment
2026-07-29 17:36:03 +02:00

2.2 KiB

Performanceaudit 2026-07-29

Baseline

  • Lokale quickbenchmark: 250 invoeritems op Windows 11, Python 3.13, 16 CPU-threads.
  • Import: p50 348,879 ms; p95 825,107 ms; totaal 125.982,74 ms.
  • Dashboardlijst: p95 1.128,986 ms in de synthetische benchmark.
  • Detail: p95 101,754 ms.
  • Rescore: 53,284 ms voor de overgebleven unieke job in deze quickrun.
  • Piekgeheugen: 105,588 MB.
  • Frontend: lokale CSS en JavaScript, zonder framework of externe runtimeassets.

De eerste run ontdekte een echte benchmarkfout: de generieke HTML-fixture leverde slechts vier van zes verwachte velden. De adapter en fixture ondersteunen nu ook gelabelde publicatiedatum en dienstverband. De herhaalde kwaliteitsrun behaalt 12/12 parservelden, dedupeprecision 1,0, recall 1,0 en nul rankingchurn.

Wijzigingen

  • Vacaturepaginering verlaagd van 30 naar 20 kaarten per pagina.
  • Ultrawideframe gecentreerd zonder extra clientcode.
  • Mobiele pipeline gebruikt een verticale grid en veroorzaakt geen horizontale documentoverflow.
  • Runtimeheartbeat gebruikt de bestaande cache en voegt geen netwerkprobe aan paginarendering toe.

Resterende risico's

  • De synthetische quickimport overschrijdt de historische NFR-007-p95-doelwaarde; profiling van het volledige 25.000-itempad blijft zinvol vóór opschaling.
  • De quickbenchmark meldt meer dan 7.900 databasequeries voor 250 importpogingen. Correctheid en idempotentie zijn goed, maar bulkimport is de eerstvolgende optimalisatiekandidaat.
  • Queuediepte is met de generieke Django-cachebackend niet betrouwbaar meetbaar en wordt daarom eerlijk als onbekend getoond.

Productiereleaseprofiling

De releaseherhaling overschreed opnieuw Django's queryloglimiet van 9.000 queries voordat de 250-itemrun afrondde. Een aansluitende herhaalrun produceerde door achtergebleven benchmarkidentiteiten geen nieuwe vacatures; database-isolatie via de lokale .env activeerde vervolgens terecht de productiedriver. Daardoor is geen betrouwbare nawaarde beschikbaar en is geen risicovolle pipelinebulkrefactor in de productieoplevering opgenomen. Vervolg: geef de benchmark een expliciete tijdelijke database en profileer process_extraction_batch per queryfamilie; behoud idempotentie, dedupeprecision/recall 1,0 en nul rankingchurn.