Перейти к содержимому
Все статьи
Разработка

Приёмка браузерной игры: почему среднего FPS недостаточно

17 октября 2026 г.· 5 мин чтения
Девятнадцать столбцов по 16 миллисекунд и один столбец 120. Линия бюджета при цели 60 проходит около 16,67. Среднее 21,2, 95-й процентиль 16, максимум 120 миллисекунд.
Одна длинная пауза видна на последовательности, даже когда выбранный процентиль остаётся низким. Открыть схему крупнее

Подрядчик показывает браузерную игру на мощном ноутбуке и сообщает средний FPS. На телефоне клиента игра время от времени зависает, хотя большая часть движения выглядит плавной. Одной средней цифры недостаточно для приёмки: нужно договориться о сценарии измерения и посмотреть распределение интервалов.

Согласуйте устройство и сцену до обещания плавности

Меню, спокойный уровень и момент с большим количеством объектов нагружают приложение по-разному. Для проверки выберите конкретные сцены, действия игрока, длительность наблюдения и целевые устройства. Укажите браузер, размер окна и условия работы, чтобы результат можно было повторить.

Начальная загрузка, прогрев и устойчивый игровой процесс тоже могут требовать отдельных измерений. Не убирайте неудобные участки молча, но и не смешивайте разные режимы под одним названием. Если договорились оценивать игровой процесс после загрузки ресурсов, этот момент должен быть явно указан.

Что отвечают разные показатели интервалов
ПоказательНа какой вопрос отвечаетЧего не доказывает
Средний интервалСколько времени в среднем приходилось на наблюдениеОтсутствие отдельных длинных пауз
95-й процентильГде находится верхняя часть распределения по выбранному определениюГарантированный предел каждого следующего кадра
МаксимумКакой самый длинный интервал попал в выборкуПричину этого интервала
Серии превышенийЕсть ли несколько длинных интервалов подрядРеальное число пропущенных экранных обновлений

Бюджет времени задаётся целью

При условной цели 60 обновлений в секунду на одно обновление приходится примерно 16,67 миллисекунды. При 30 — около 33,33. Это полезные ориентиры для анализа, но частота экрана, устройство, выполнение JavaScript и отрисовка не становятся одинаковыми только потому, что в задании указано число 60.

MDN рассматривает плавность через работу кадра и затраты на обновление представления. Для вашего проекта важно выбрать подходящий источник измерений. Интервалы вызовов браузерного обработчика, работа CPU и фактическое отображение на экране — разные наблюдения; не называйте любое из них универсальным измерением всей производительности.

Одна длинная пауза меняет впечатление

В учебном наборе девятнадцать интервалов по 16 миллисекунд и один интервал 120. Средний интервал составляет 21,2 миллисекунды. Величина 1000, делённая на этот средний интервал, равна примерно 47,17 в секунду. Но она не рассказывает, где именно игрок встретил длинную паузу.

Для этого набора 95-й процентиль по методу ближайшего ранга равен 16 миллисекундам, а максимум — 120. Такой результат возможен: ровно пять процентов наблюдений лежат выше этого процентиля. Поэтому даже хороший процентиль не заменяет проверку худших пауз и их положения в сценарии.

Почему определение процентиля нужно записать

Разные программы могут использовать интерполяцию или другой способ выбора значения. Ниже берётся элемент с номером округлённого вверх произведения доли на размер выборки, начиная нумерацию с единицы. Для коротких выборок разница методов особенно заметна.

Не сравнивайте чужую метрику с расчётом, пока не уточнили определение и единицы. Среднее мгновенных значений FPS также не обязано совпадать с 1000, делённой на среднее время: это разные способы усреднения. В инструменте показан только второй вариант с явной подписью.

Как пользоваться инструментом

Введите положительные интервалы в миллисекундах и выбранную целевую частоту. Инструмент покажет среднее, медиану, 95-й процентиль, максимум, долю интервалов строго длиннее бюджета и последовательные серии таких превышений. Исходный порядок важен для серий, поэтому он сохраняется отдельно от сортировки для процентилей.

Интервал ровно на границе бюджета не считается превышением. Сумма длительностей в серии означает сумму введённых интервалов, а не автоматически время «потерянной анимации». Калькулятор не видит причину паузы, частоту экрана, потерянные события или полноту записи.

Приёмка должна включать наблюдение игрока

  1. Повторить согласованный сценарий на целевом устройстве.
  2. Сохранить исходную запись интервалов и условия измерения.
  3. Отметить длинные паузы и сопоставить их с действиями в игре.
  4. Использовать профилировщик для поиска причины, затем повторить тот же сценарий.
  5. Проверить, что исправление не ухудшило ввод, загрузку и другие сцены.

Для заказа разработки полезнее согласовать такой план, чем обещание «всегда 60 FPS» без устройства и нагрузки. Если игра будет встроена в сайт или открываться в конкретной оболочке, проверяйте её и там: отдельная демонстрационная вкладка не обязательно повторяет условия пользователя.

Итогом становится воспроизводимый разговор о качестве: где игра работает плавно, какие паузы наблюдались и что проверено после исправления. Средняя цифра остаётся полезной частью отчёта, но не заменяет весь отчёт.

Разобрать интервалы и серии превышений бюджета

До 1000 значений. Процентили — ближайший ранг: ceil(p×N). Превышение строго больше 1000/цели. Обратная величина среднего интервала не равна среднему мгновенных FPS и не доказывает частоту отображения на экране. Расчёт выполняется на вашем устройстве, введённые данные никуда не отправляются.

Материалы для проверки

Если нужна реализация

Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.

Разработка браузерной HTML5-игры Разработка игр

Нужна помощь с проектом?

Обсудим задачу и предложим решение — от сайта до SaaS и защиты.

Связаться