# Профилирование: perf/ ## Стенд Требования: Docker, python3.12, Node 24, npm. ``` perf/stand.sh all # up, migrate, bootstrap, web-build, api, web, smoke perf/stand.sh down # остановить бэк, фронт и Postgres ``` Подкоманды: `up | migrate | bootstrap | api | web-build | web | smoke | reset | down | all`. `reset` — чистая БД: останавливает бэк, сносит volume Postgres, поднимает заново (`up`, `migrate`, `bootstrap`, `api`); фронт не трогает. - Postgres 16 (`pg_stat_statements`) на `localhost:55432`, `perf/perf/perf`. - Бэк (`DEBUG=true`) на `http://localhost:8000`, логи и PID в `perf/.run/`. - Фронт (prod-сборка, `rsbuild preview`) на `http://localhost:8080`; `/api` (включая WebSocket) проксируется на бэк. - Профилирующая сборка (`PERF_PROFILING=1`, `react-dom/profiling`) лежит в `perf/.build/profiling`, обычная в `perf/.build/prod`. Для запуска preview с профилирующей сборкой: `PERF_PROFILING=1 perf/stand.sh web` (после остановки обычного `web`). - Админ: `admin` / `admin`. - Переменные: `PERF_API`, `PERF_WEB`, `PERF_DB_DSN`. - Зависимости Python ставятся в `perf/.venv` (`api/requirements-dev.txt` + `perf/requirements.txt`). - npm берёт пакеты с `https://registry.npmjs.org` (`npm_config_registry`), `web/.npmrc` не нужен. ## Данные ``` perf/stand.sh reset # пустая БД (генератор на непустой БД откажется работать) cd perf && .venv/bin/python -m perfkit.gen.run --scale 1 # ~20-40 мин, пишет results/manifest-s1.json cd perf && .venv/bin/python -m perfkit.gen.verify --scale 1 # должен напечатать VERIFY OK ``` Генератор работает через HTTP-API под `admin` (WebSocket — только для программ и проектов FORM_4, у них нет HTTP-ручки). Пользователи: `perf_rf`, `perf_rf_coauthor` (одна РФ, роль 3) и `perf_dfip` (роль 2, все оргединицы), пароль `perf`; в манифесте они под ключами `rf`, `rf_coauthor`, `dfip`. Числа плана и их обоснование — в `perf/perfkit/gen/plan.py`. ## Фронт: замеры Каркас: `perf/e2e` (Playwright + CDP). Версии: `@playwright/test` 1.64.1, Chromium 156.0.8078.4 (headless shell, revision 1248). ``` cd perf/e2e && npm install && npx playwright install chromium # npm_config_registry=https://registry.npmjs.org npx playwright test tests/harness.spec.ts # самопроверка каркаса ``` - `PERF_RUN_ID` — имя каталога прогона `perf/results//` (по умолчанию `YYYYMMDD-HHMM`). - `PERF_SCALE` — масштаб манифеста `perf/results/manifest-s.json` (по умолчанию 1). - `PERF_API`, `PERF_WEB` — адреса стенда (`http://localhost:8000`, `http://localhost:8080`). - Агрегация: `cd perf && .venv/bin/python -m perfkit.aggregate results/`. - Библиотеки `perf/e2e/lib/`: `auth.loginAs`, `cdp.*` (throttle, trace, gc, heap), `probe` (long tasks > 50 мс, кадры rAF; тяжёлый кадр — интервал > 50 мс), `results.append`, `manifest.loadManifest`.