Andrey Epifancev efa537e008 perf: каркас замеров фронта
Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 22:12:36 +04:00

3.5 KiB
Raw Blame History

Профилирование: 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/<run_id>/ (по умолчанию YYYYMMDD-HHMM).
  • PERF_SCALE — масштаб манифеста perf/results/manifest-s<scale>.json (по умолчанию 1).
  • PERF_API, PERF_WEB — адреса стенда (http://localhost:8000, http://localhost:8080).
  • Агрегация: cd perf && .venv/bin/python -m perfkit.aggregate results/<run_id>.
  • Библиотеки perf/e2e/lib/: auth.loginAs, cdp.* (throttle, trace, gc, heap), probe (long tasks > 50 мс, кадры rAF; тяжёлый кадр — интервал > 50 мс), results.append, manifest.loadManifest.