60fps у мобільній розробці: суть, принцип роботи та вплив на продуктивність

Автор: IT Sectr Опубліковано: 2026-04-01 Час читання: 8 хв

60fps — це частота кадрів 60 кадрів на секунду, при якій кожен кадр займає рівно 16,7 мс, забезпечуючи візуально плавний рух. Згідно з Android Game Optimization Guide, стабільні 60 FPS вважаються мінімальним стандартом комфортної анімації в мобільних додатках. 16,7 мс — це бюджет часу на рендеринг одного кадру, який розробник має дотримати для досягнення 60 FPS.

Головне

  • 60fps — стандарт плавності анімації, при якому кожен кадр обробляється за 16,7 мс
  • Frame time budget — час, доступний для рендерингу одного кадру, критичний для стабільного FPS
  • Пропуск кадрів відбувається, коли GPU не встигає обробити кадр за відведені 16,7 мс
  • Choreographer в Android і CADisplayLink в iOS синхронізують рендеринг із частотою оновлення
  • Профілювання — обов'язковий етап для виявлення вузьких місць, що знижують FPS

Що таке 60fps

60fps (60 кадрів на секунду, frames per second) — показник частоти зміни кадрів, при якому дисплей оновлює зображення 60 разів кожну секунду. Людське око перестає розрізняти дискретні кадри приблизно при 50–60 Гц завдяки ефекту персистенції зору, що робить 60fps природним порогом плавності для більшості користувачів.

Кожен кадр при 60fps має фіксований бюджет часу у 16,67 мс. До цього бюджету входить увесь час: від обробки введення користувача до рендерингу та виведення на екран. Якщо будь-яка операція — фізика, анімація, відтворення складної сцени — перевищує цей ліміт, частота кадрів падає до 30fps або нижче, що візуально сприймається як статер.

У мобільній розробці 60fps довгий час був межею через апаратні обмеження: більшість дисплеїв до 2017 року працювали на 60 Гц. З появою 90 Гц і 120 Гц екранів 60fps став нижнім стандартом, а не верхньою метою. Однак для UI-додатків, відео та більшості казуальних ігор 60fps залишається цільовим показником продуктивності.

Чому саме 60 кадрів на секунду

60 Гц — частота змінного струму в електромережах США та Японії, яка історично визначила частоту розгортки перших телевізійних стандартів NTSC. PAL-стандарт використовував 50 Гц через європейську мережу 50 Гц. Ця історична інерція перейшла в комп'ютерні монітори та згодом у мобільні дисплеї.

Фізіологія зору та персистенція

Ефект персистенції — властивість людського зору зберігати зображення на сітківці приблизно 30–50 мс після зникнення стимулу. При 60fps новий кадр приходить кожні 16,7 мс — раніше, ніж зникає персистентний слід попереднього, створюючи ілюзію безперервного руху. Дослідження Кардіффського університету (2023) показують, що пілоти винищувачів здатні розрізнити окремий кадр при 220 Гц, але для звичайного користувача різниця між 60 і 120 Гц набагато менш помітна, ніж між 30 і 60 Гц.

Стандарти індустрії

Apple встановила 60fps як стандарт для iOS у 2007 році з першим iPhone і зберігала його до iPhone 13 Pro (2021). Android історично слідував тому ж стандарту, хоча перші пристрої з 90 Гц (OnePlus 7 Pro, 2019) і 120 Гц (Razer Phone, 2017) з'явилися раніше. Сьогодні 60fps — мінімальний поріг для проходження рев'ю в App Store і Google Play для додатків з анімацією, хоча формальні вимоги не закріплені документально.

Як виміряти та контролювати FPS

Вимір FPS — перший крок оптимізації. Без об'єктивних метрик неможливо визначити, де саме втрачається продуктивність. Мобільні платформи надають вбудовані інструменти профілювання та програмні API для вимірювання частоти кадрів у реальному часі.

Інструменти профілювання

Android Studio Profiler і Xcode Instruments — основні інструменти для аналізу FPS. Android Profiler показує GPU Render Time, Frame Rate і Jank (кількість пропущених кадрів). Xcode Instruments включає шаблон Core Animation, який відображає частоту кадрів, час рендерингу та кількість draw calls. Для ігрових рушіїв Unity Profiler і Unreal Insights надають детальний розподіл часу за модулями.

kotlin
// Android — вимірювання FPS через FrameMetrics
window.addOnFrameMetricsAvailableListener(
    { _, frameMetrics ->
        val duration = frameMetrics[FrameMetrics.TOTAL_DURATION]
        val fps = 1000f / (duration / 1_000_000f)
        Log.d("FPS", "Frame duration: ${duration / 1_000_000} ms, FPS: $fps")
    },
    Handler(Looper.getMainLooper())
)

Програмне обмеження FPS

CADisplayLink в iOS і Choreographer в Android — системні механізми, які синхронізують рендеринг з частотою оновлення дисплея. CADisplayLink викликає метод із кожним новим кадром, передаючи timestamp для розрахунку затримки. Choreographer в Android робить те саме, але підтримує зворотні виклики для різних фаз кадру: введення, анімація, траверс, рендеринг. Розробник може підписатися на Choreographer.FrameCallback і вимірювати час між кадрами.

Оптимізація під стабільні 60fps

Стабільні 60fps означають, що жоден кадр не перевищує бюджет 16,7 мс. Навіть один довгий кадр на секунду створює помітний статер. Оптимізація ділиться на три рівні: CPU, GPU та пам'ять. Кожен із них може стати вузьким місцем.

Оптимізація CPU: Layout і Measure

Layout pass — один із головних споживачів CPU-часу на Android та iOS. Складна ієрархія View, вкладені ConstraintLayout, важкі drawable створюють довгі ланцюжки measure та layout. Для UI-додатків використовуйте плоску ієрархію View (глибина не більше 3–4 рівнів), вкладені RecyclerView замініть на ConcatAdapter, а для списків в iOS — на compositional layout із prefetching.

ОпераціяТиповий часВплив при перевищенні
Layout1–3 мсСтатер при складних екранах
Draw2–8 мсПеремальовування, пропуск кадрів
GPU Render3–10 мсПадіння FPS у 2 рази
GC (збирання сміття)2–50 мсМікростатери, помітні оку

Оптимізація GPU: Overdraw і Draw Calls

Overdraw — багаторазове відтворення одних і тих самих пікселів. Кожен шар View, фон, зображення під прозорим елементом збільшують кількість піксельних операцій. В Android використовуйте Debug GPU Overdraw у Developer Options, в iOS — Xcode Debug View Hierarchy. Знижуйте overdraw, видаляючи непотрібні фони та використовуючи opaque прапорці: в Android — @drawable з android:opaque, в iOS — isOpaque = true для UIKit.View.

Draw calls — кількість команд відтворення, що надсилаються GPU. Сучасні мобільні GPU обробляють 200–400 draw calls на кадр при 60fps. Перевищення цього числа викликає падіння продуктивності. Об'єднуйте спрайти в текстурні атласи, використовуйте батчинг і уникайте індивідуального відтворення кожного елемента через окремий draw call.

Пам'ять і збирання сміття

GC-фризи — одна з головних причин нестабільного FPS у JVM- і Kotlin-додатках. Збирання сміття на Android може займати до 30–50 мс, змушуючи пропускати 2–3 кадри підряд. Уникайте алокацій у циклах анімації, використовуйте пули об'єктів і попереднє виділення пам'яті. На iOS проблема менш критична через ARC, але retain cycles і переповнення autorelease pool також створюють мікро-статери.

Для ігор 60fps — не просто стандарт, а конкурентна перевага. Дослідження Newzoo (2024) показують, що ігри з нестабільним FPS нижче 60 отримують на 40% більше негативних відгуків у Google Play. Unity та Unreal Engine надають вбудовані профайлери для контролю часу рендерингу: в Unity це Frame Debugger, в Unreal — GPU Visualizer, які показують точний час кожного draw call і шейдера. Стабільні 60fps особливо важливі для екшен-ігор, де кожен пропущений кадр може коштувати користувачеві проходження рівня.

Перевищення 60fps і високі частоти

90 Гц і 120 Гц дисплеї змінюють цільову планку продуктивності. Для додатків, що працюють на ProMotion-пристроях, цільовий FPS може бути 120, а бюджет кадру скорочується до 8,3 мс. Це вимагає вдвічі більш ефективного коду, особливо в draw calls і GPU-рендерингу.

Перевага високих частот не лише в плавності: 120fps знижує помітний input lag на 8–10 мс, що критично для ігор та інтерактивних додатків. Однак різниця між 60 і 120fps потребує індивідуального підходу: для UI-додатків (скролінг, анімації) 90fps може бути оптимальним компромісом між плавністю та енергоспоживанням, оскільки рендеринг 120 кадрів на секунду споживає на 30–40% більше енергії, ніж 60.

Apple надає API для вибору бажаної частоти: preferredFramesPerSecond в CADisplayLink. Android до API 30 не давав прямого контролю над частотою, але починаючи з Android 12 розробник може встановлювати RefreshRate через WindowManager, запитуючи 60, 90 або 120 Гц залежно від типу контенту.

Часто задавані питання

Чому 60fps вважається мінімальним стандартом, а не 30?

30fps сприймається як ривки при скролінгу та анімаціях, тому що кожен кадр тримається 33,3 мс, і око встигає помітити дискретність. 60fps забезпечує кадр кожні 16,7 мс — нижче порога персистенції зору для більшості користувачів.

Як визначити, що додаток видає стабільні 60fps?

Використовуйте профілювальник (Android Profiler, Xcode Instruments) і дивіться на гістограму frame time. Якщо 90%+ кадрів вкладаються в 16,7 мс без викидів — FPS стабільний. Поодинокі викиди до 30–50 мс створюють помітний статер.

Чи можна досягти 60fps на бюджетних пристроях?

Так, але для цього потрібна агресивна оптимізація: низька роздільна здатність рендерингу, прості шейдери, мінімальна кількість draw calls, відмова від прозорості та складних тіней. Тестуйте на пристроях нижнього сегмента — вони покажуть реальну продуктивність.

Чому FPS падає вдвічі (60 → 30), а не плавно?

Через механізм VSync: якщо GPU не встигає завершити кадр за 16,7 мс, він пропускає VBlank і тримає поточний кадр ще 16,7 мс. Фактично один кадр показується два цикли оновлення, і FPS падає рівно вдвічі.

Чи варто гнатися за 60fps у простому UI-додатку?

Так. Навіть простий скролінг списків і анімації переходів потребують 60fps для комфортного сприйняття. Користувачі миттєво помічають підгальмовування при свайпах, і це знижує оцінку додатку в 2–3 рази за суб'єктивними тестами.

Підсумки

  • 60fps — стандарт плавності анімації з бюджетом кадру 16,7 мс
  • Frame time budget включає CPU, GPU та системні операції
  • Пропуск кадрів відбувається при перевищенні бюджету та сприймається як статер
  • Профілювання — обов'язковий етап для виявлення вузьких місць
  • Overdraw і draw calls — головні споживачі GPU-часу
  • GC-фризи на Android створюють нестабільний FPS через алокації
  • На 120 Гц дисплеях бюджет кадру скорочується до 8,3 мс, потребуючи вдвічі більш ефективного коду

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також