# Нагрузочная проверка — 29 сентября 2026

Проверялось локальное приложение на Windows 10, Node.js 22.22.0, Intel Core i3-1115G4 (4 логических потока), 7,8 ГБ ОЗУ. Клиент нагрузки и отдельный процесс сервера работали на одном компьютере через `127.0.0.1`; для каждого прогона создавалась временная база SQLite в режиме WAL. Рабочая база и аккаунты не затронуты.

Сценарий: 10 одновременных сессий с образцом «Стандарты гостеприимства»; участники подключаются, запрашивают текущий слайд каждые 1,5 секунды, затем все одновременно отвечают на тестовый вопрос. При сетевом сбое клиент повторяет отправку до двух раз. После ответов ведущие запрашивают состояние. Метрика p95 — время, за которое завершились 95% запросов в данной фазе. Требование ТЗ: не более 2 секунд для 95% ответов и смены слайда в фиксированной среде.

| Участники | Опросы состояния | Ответы приняты | Повторы ответов | p95 подтверждения ответа | Результат |
|---:|---:|---:|---:|---:|---|
| 500 (50 × 10) | 5 000 / 5 000 | 500 / 500 | 0 | 861 мс | Цель выполнена |
| 1 000 (100 × 10) | 5 000 / 5 000 | 1 000 / 1 000 | 441 | 1 666 мс | Цель выполнена в одном прогоне |
| 1 200 (120 × 10) | 3 600 / 3 600 | 1 200 / 1 200 | 650 | 2 060 мс | Выше целевого времени |
| 1 500 (150 × 10) | 4 500 / 4 500 | 1 500 / 1 500 | 967 | 2 543 мс | Выше целевого времени |

Без автоматического повтора на этом Windows-хосте одновременный старт 600 и 1000 HTTP-соединений приводил к `ECONNREFUSED` для части запросов. При 500 одновременных ответах ошибок не было. Сервер обрабатывает повтор уже принятого ответа идемпотентно и не начисляет баллы второй раз.

**Вывод для пилота:** 500 участников в 10 сессиях — проверенная на этом компьютере конфигурация с запасом по времени ответа. 1 000 участников прошли один прогон при автоматических повторах; это не гарантированная вместимость сервера. Максимум для реального сервера определяется после повторных тестов на выбранном VPS с HTTPS-прокси, реальными телефонами и сетью, типовыми презентациями, длительной работой и загрузкой файлов. Эти цифры нельзя переносить на другой компьютер или интернет без проверки.

Повторная проверка 30.09.2026 после добавления паузы: 500/500 подключений, 5 000/5 000 опросов и 500/500 ответов без повторов и ошибок; p95 подтверждения ответа — 1 798 мс, p95 опроса участника — 242 мс. Цель 2 секунды выполнена и в этом прогоне; разброс между прогонами показывает, что нужен тест на будущем сервере.

Проверка после расширения редактора, ролей и отчётов 30.09.2026: 500/500 подключений, 5 000/5 000 опросов, 500/500 ответов без повторов и ошибок; p95 подтверждения ответа — 1 851 мс, p95 опроса — 186 мс. Это третий локальный прогон на 500 участников с выполненной целью по ответам.

Повторить локально из корня проекта: `npm run load:test -- 500 10 10`. Параметры: участники, число сессий, число циклов опроса. Сценарий использует временную базу и удаляет её после проверки.
