← EnergyView

Performance- en uitkomstcontrole

Dit beschrijft het oorspronkelijke meetgereedschap. De latere audit en optimalisaties staan in docs/audit. Tarieven en uitkomsten zijn daarbij niet gewijzigd.

Uitvoeren

Gebruik Node 22+ en voer commando's uit vanuit de projectroot. Stop andere zware processen voor vergelijkbare CPU-cijfers.

npm test
npm run perf:golden          # alle acht synthetische scenario's; geen timingbudget
npm run perf:assets          # bron/uitgeleverde bytes + lokale compressie/parse
npm run perf -- --node-only  # golden + CPU-profielen + Node tijd/geheugenbudget
npm run perf                # idem + verplichte desktop/mobiele browserbudgetten

npm run perf heeft exitcode 2 als de browser ontbreekt. Ontbrekende metingen worden niet als geslaagd beschouwd. --node-only is nadrukkelijk een deelmeting. Standaard staat uitvoer in .perf-results/latest/, met per scenario JSON en een DevTools-leesbaar .cpuprofile. Gebruik --out=.perf-results/naam om een run apart te bewaren.

Playwright apart installeren

Geen nieuwe runtime-dependency voor de app. Installeer de dev-tool in een losse, genegeerde map:

npm install --prefix .perf-tools --no-package-lock playwright@1.62.1
node .perf-tools/node_modules/playwright/cli.js install chromium --only-shell
npm run perf:browser

Alternatieven: PERF_PLAYWRIGHT_MODULE=/absoluut/pad/naar/playwright/index.mjs, PERF_CHROMIUM_PATH=/absoluut/pad/naar/chromium. De runner kan ook de aanwezige Codex-runtime gebruiken. Browserinstallatie is in deze omgeving mislukt met een onbruikbare ZIP-download. De browsercode is syntactisch gecontroleerd, maar de flows zijn hier niet end-to-end gevalideerd; dat is een expliciete opleveringsbeperking.

De standaardbrowserrunner start een tijdelijke, uitsluitend lokale origin met dezelfde gebundelde Worker. Marktdata is een synthetische fixture, geen externe API-meting. Via npm run perf -- --url=https://... kan een geschikte bereikbare testorigin worden gebruikt. Die origin moet de fixture-seedpagina /__perf_seed bevatten; dit endpoint bestaat alleen in de lokale benchmarkserver, niet in de productiesite. Gebruik de productiesite dus niet voor de seeding-flow. Er worden geen bestaande browserprofielen of gebruikerssessies gebruikt.

Browsermetingen: een vers desktop- en mobiel-context, koud cachepad, netwerkbytes/responseheaders via CDP, JSheap/ScriptDuration via Performance, CPU-profiel van de hoofdthread, observer voor Long Tasks, tijd tot invoer mogelijk en tijd na contractkeuze. Een extra luisteraar rond Worker meet postMessage-serialisatie, voortgang en afronding; het instrumentatie-effect hoort bij de benchmark. Input blijft tijdens het achtergrondwerk herhaald worden, tot afronding of maximaal 90 seconden. Een niet-afgeronde analyse faalt het browserbudget.

Mobiel gebruikt expliciet CDP 150 ms RTT, 1.600 Kbit/s down, 750 Kbit/s up en 4x CPU. Dat is geen Lighthouse-run, en deze parameters worden niet stilzwijgend een Lighthouse-score of echte telefoonmeting genoemd. Voor een echte Lighthouse-baseline en exacte presetpariteit is een aanvullende Lighthouse-run nodig zodra Chromium werkt. De runner schrijft ook een CDP-trace en berekent de unie van herkenbare parse/compile-slices op renderer-main-threads. Dit pad is hier niet uitgevoerd/gevalideerd; ScriptDuration en Node JSON.parse zijn geen vervanging voor die browsermeting.

Vangnet en herijken

Budgetten

tests/perf/budgets.json bewaart vaste initiële Node-regressielimieten (eerste cold baseline +30% +250 ms, peak RSS +25%) en de gevraagde UX-limieten. Limieten worden niet automatisch opnieuw opgenomen als een run trager wordt. Node-CPU-tijden zijn hardware- en contentiongevoelig: vergelijk alleen op een overeenkomstige, geïsoleerde runner. Browserdoelen zijn nog onbeoordeeld. Voer geen npm test parallel aan een timingbaseline uit; de tweede correctheidsrun tijdens deze sessie was bewust afzonderlijk gerapporteerd als gecontendeerd en overschreed een CPU-budget ondanks identieke resultaten.

Historisch stopmoment

Het oorspronkelijke onderzoek stopte na het vangnet en de baseline. Inmiddels zijn de auditfasen uitgevoerd; zie het auditoverzicht voor actuele wijzigingen, metingen en beperkingen. De browserdoelen blijven onbewezen zolang de throttled browserharness niet kan draaien.