35 lines
2.6 KiB
Markdown
35 lines
2.6 KiB
Markdown
# Performanceaudit 2026-07-29
|
|
|
|
## Importoptimalisatie 0.3.14
|
|
|
|
De eerder geregistreerde importhotspot is opgelost en reproduceerbaar gemeten in een disposable PostgreSQL-database. Tegenover de 0.3.13-baseline daalt de gemiddelde 250-itemimport van 16.358,158 naar 9.040,123 ms; p95 daalt van 79,871 naar 52,296 ms en queryvolume van meer dan 9.000 naar exact 3.264. Zie `IMPORT_PERFORMANCE_BASELINE.md`, `IMPORT_QUERY_ANALYSIS.md` en `IMPORT_PERFORMANCE_FINAL.md`.
|
|
|
|
## 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.
|