Счётчик FPS и профилирование отрисовки

В Senzoukria есть два показания частоты кадров: глобальный счётчик, включаемый по Ctrl+Shift+F, и счётчик на каждом графике рядом с ценовой осью, а также профилировщик проходов отрисовки, чьи замеры уходят в консоль в разработке или по явному согласию.

Senzoukria · Документация · Обновлено: сентябрь 2026


Где найти

Глобальный счётчик
Ctrl+Shift+F включает и выключает; выбор запоминается между запусками
Счётчик графика
Вверху графика, слева от ценовой оси, обновляется каждые 500 мс
Чёткость отрисовки
Настройки → Производительность → 1×, 1,5× или 2×; по умолчанию 1,5×
Вывод профилировщика проходов
Строки консоли с меткой [fp-perf], раз в секунду, в сборках для разработки или по согласию

Что это такое

Глобальный счётчик FPS — диагностическая полоса, которую включают на тридцать секунд, чтобы посмотреть число. Он показывает кадры в секунду за последнюю секунду, худшее время кадра за эту секунду в миллисекундах, определённую частоту обновления экрана (медиана 60 интервалов между кадрами, измеренных при монтировании) и, после возврата фокуса окну, средний и минимальный FPS, измеренные, пока окно было в фоне. Последняя цифра отвечает на вопрос, не притормаживает ли приложение за другой программой. Когда Windows запрашивает уменьшение анимации, полоса сообщает «анимации ВЫКЛ (Windows)», потому что фон в этом случае заморожен намеренно.

Счётчик графика измеряет другое: с сентября 2026 года он считает кадры, которые главный поток действительно выдаёт на экран, пока график виден, а не число перерисовок. Поэтому он следует частоте панели (60, 100, 144, 240) и падает только при настоящем рывке. Счётчик перерисовок остался в логах [fp-perf], под именем painted=. Пауза длиннее секунды без кадра — например, скрытый график или свёрнутое окно — перезапускает измерение, а не засчитывается как зависание; при этом сам график рисует, только когда что-то меняется, через цикл кадров, который держит не более одного отложенного кадра и ни одного, пока график скрыт.

Показания и пороги

Цвета так, как они вычисляются в коде
ПоказаниеЗелёныйЖёлтыйКрасный
Глобальный счётчик (относительно определённой частоты обновления)≥ 92 % частоты обновления≥ 70 %ниже 70 %
Счётчик графика (относительно лучшего из последних 10 замеров)≥ 90 % недавнего пика и ≥ 50 fps≥ 70 % пика либо от 30 до 49 fpsниже 70 % пика либо меньше 30 fps
Фоновая статистикаминимум ≥ 60 fpsминимум ниже 60 fps

Настройки

Что меняет стоимость отрисовки
НастройкаПо умолчаниюНа что влияет
Чёткость отрисовки1,5×Предел коэффициента пикселей холста. 1× вдвое уменьшает число пикселей на экранах HiDPI; 2× — самый чёткий и самый тяжёлый. Варианты: 1×, 1,5×, 2×.
Режим производительностиСбалансированный«Производительность» ставит 1×, «сбалансированный» — 1,5×, «точность» — 2× (вместе с другими параметрами). Ручное изменение любого параметра переводит режим в «ручной».
Логи производительностиВыключены в релизных сборкахЗадайте в localStorage senzoukria.perfLogs значение 1 и перезагрузите, чтобы включить строки [fp-perf] в консоли релизной сборки.

Профилирование проходов отрисовки

Каждый проход отрисовки рендерера футпринта (ячейки, профили, уровни GEX, маркеры новостей, коммит панели DOM, коммиты React) замеряется общим профилировщиком. Раз в секунду холст выгружает его и печатает в консоль строку с ранжированием: суммарные и средние миллисекунды на проход, худший проход, число коммитов React и стоимость панели DOM. Профилировщик не держит ссылок ни на холст, ни на React, а у открепляемых окон свой экземпляр, поэтому замеры разных окон никогда не смешиваются.

В распространяемых сборках эти логи молчат, потому что консоль WebView удерживает всё, что в неё пишут, а лог раз в секунду в течение часов стоит памяти. Они включены в npm run dev и могут быть включены на машине пользователя ключом согласия, указанным выше.

Ограничения и подводные камни

Как читать числа:

  • Счётчик графика останавливается, а не показывает ноль: когда график скрыт или окно неактивно, измерение приостанавливается и начинается заново на следующем кадре.
  • Цвета отсчитываются от недавнего пика, поэтому одни и те же 120 fps читаются зелёным на экране 120 Гц и жёлтым на 240 Гц.
  • Определённая частота обновления — медиана интервалов между кадрами; на машине, которая не справляется, она может оказаться ниже реальной частоты панели.
  • У глобального счётчика собственный цикл requestAnimationFrame; вне диагностики держите его выключенным.
  • Фоновым замерам нужно, чтобы окно потеряло фокус и вернуло его; полоса показывает только последний период в фоне.

Эта страница на других языках

Частые вопросы

Как показать счётчик FPS?
Нажмите Ctrl+Shift+F. Нажмите ещё раз или щёлкните ✕, чтобы скрыть. Состояние хранится под ключом senz.fpsMeter и восстанавливается при следующем запуске.
Счётчик графика показывает 45 fps на мониторе 144 Гц. Что это значит?
Это значит, что главный поток выдал 45 кадров за последнюю секунду, пока график был виден, — значит, что-то его тормозит. Цвет относителен: зелёный требует не менее 90 % от лучшего из десяти последних замеров и 50 fps, а всё ниже 30 fps красное при любом экране. Сравните с глобальным счётчиком, который сопоставляет цикл анимации с определённой частотой обновления.
Где числа профилирования отрисовки?
В консоли разработчика, строками [fp-perf] раз в секунду; доступны в сборках для разработки либо после установки в localStorage senzoukria.perfLogs значения 1 и перезагрузки.