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

Подрядчик показывает браузерную игру на мощном ноутбуке и сообщает средний 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-й процентиль, максимум, долю интервалов строго длиннее бюджета и последовательные серии таких превышений. Исходный порядок важен для серий, поэтому он сохраняется отдельно от сортировки для процентилей.
Интервал ровно на границе бюджета не считается превышением. Сумма длительностей в серии означает сумму введённых интервалов, а не автоматически время «потерянной анимации». Калькулятор не видит причину паузы, частоту экрана, потерянные события или полноту записи.
Приёмка должна включать наблюдение игрока
- Повторить согласованный сценарий на целевом устройстве.
- Сохранить исходную запись интервалов и условия измерения.
- Отметить длинные паузы и сопоставить их с действиями в игре.
- Использовать профилировщик для поиска причины, затем повторить тот же сценарий.
- Проверить, что исправление не ухудшило ввод, загрузку и другие сцены.
Для заказа разработки полезнее согласовать такой план, чем обещание «всегда 60 FPS» без устройства и нагрузки. Если игра будет встроена в сайт или открываться в конкретной оболочке, проверяйте её и там: отдельная демонстрационная вкладка не обязательно повторяет условия пользователя.
Итогом становится воспроизводимый разговор о качестве: где игра работает плавно, какие паузы наблюдались и что проверено после исправления. Средняя цифра остаётся полезной частью отчёта, но не заменяет весь отчёт.
Разобрать интервалы и серии превышений бюджета
До 1000 значений. Процентили — ближайший ранг: ceil(p×N). Превышение строго больше 1000/цели. Обратная величина среднего интервала не равна среднему мгновенных FPS и не доказывает частоту отображения на экране. Расчёт выполняется на вашем устройстве, введённые данные никуда не отправляются.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
