# Lasttest – referensvärden Skript: `scripts/loadtest.mjs` (autocannon, 25 samtidiga anslutningar, 10 s per scenario). Kör mot valfri miljö: `API_BASE_URL=https://… node scripts/loadtest.mjs` Trösklar: p99 < 500 ms, 0 fel, > 100 req/s på receptlistan. UNDERKÄND ger exitkod 1 (CI-vänligt). ## Senaste körning (dev-container, 1 process, lokal Postgres) | Scenario | req/s | p50 | p99 | fel | | ------------------------------------------------------ | ----- | ------ | ------ | --- | | healthz (baslinje) | 12040 | 1 ms | 6 ms | 0 | | GET /v1/recipes (lista + i18n-upplösning) | 754 | 31 ms | 74 ms | 0 | | GET /v1/recommendations/what-to-eat (tyngsta läsvägen) | 135 | 173 ms | 290 ms | 0 | Kommentar: healthz visar ren Fastify-overhead. Receptlistan inkluderar i18n-titelupplösning mot översättningstabellen. Rekommendationsvägen är medvetet tyngst (lager + FEFO + motor + förklaringar) – ~126 req/s på en utvecklingscontainer motsvarar med god marginal förväntad lanseringstrafik; skala horisontellt (fler API-containrar) före databasen. ## Vid produktionssättning 1. Kör mot staging bakom TLS – förvänta ~10–20 % lägre värden (TLS + nät). 2. Kör om efter varje kapacitetspåverkande ändring (nya index, tunga endpoints). 3. Rate limit: produktion har 300 req/min/IP – lasttest kräver RATE_LIMIT_MAX-överstyrning.