60fps — je frekvence 60 snímků za sekundu, při které každý snímek trvá přesně 16.7 ms a zajišťuje vizuálně plynulý pohyb. Podle Android Game Optimization Guide je stabilních 60 FPS považováno za minimální standard pohodlné animace v mobilních aplikacích. 16.7 ms — je časový rozpočet na vykreslení jednoho snímku, který musí vývojář dodržet, aby dosáhl 60 FPS.
Hlavní
60fps (60 snímků za sekundu, frames per second) — ukazatel frekvence změny snímků, při kterém displej obnovuje obraz 60krát za sekundu. Lidské oko přestává rozlišovat diskrétní snímky přibližně při 50–60 Hz díky efektu perzistence vidění, což činí 60fps přirozeným prahem plynulosti pro většinu uživatelů.
Každý snímek při 60fps má fixní časový rozpočet 16.67 ms. Tento rozpočet zahrnuje veškerý čas: od zpracování vstupu uživatele až po vykreslení a výstup na obrazovku. Pokud jakákoli operace — fyzika, animace, kreslení složité scény — překročí tento limit, frekvence snímků klesne na 30fps nebo níže, což je vizuálně vnímáno jako škubání.
V mobilním vývoji byl 60fps dlouhou dobu limitem kvůli hardwarovým omezením: většina displejů do roku 2017 pracovala na 60 Hz. S příchodem 90 Hz a 120 Hz obrazovek se 60fps stal spodním standardem, nikoli horním cílem. Pro UI aplikace, video a většinu kauzálních her však 60fps zůstává cílovým ukazatelem výkonu.
60 Hz — frekvence střídavého proudu v elektrických sítích USA a Japonska, která historicky určila snímací frekvenci prvních televizních standardů NTSC. Standard PAL používal 50 Hz kvůli evropské síti 50 Hz. Tato historická setrvačnost přešla na počítačové monitory a následně na mobilní displeje.
Efekt perzistence — vlastnost lidského zraku udržet obraz na sítnici přibližně 30–50 ms po vymizení podnětu. Při 60fps přichází nový snímek každých 16.7 ms — dříve, než zmizí perzistentní stopa předchozího snímku, čímž vytváří iluzi plynulého pohybu. Výzkumy Cardiffské univerzity (2023) ukazují, že piloti stíhaček dokáží rozlišit jednotlivý snímek při 220 Hz, ale pro běžného uživatele je rozdíl mezi 60 a 120 Hz mnohem méně znatelný než mezi 30 a 60 Hz.
Apple nastavil 60fps jako standard pro iOS v roce 2007 s prvním iPhonem a udržel jej až do iPhone 13 Pro (2021). Android historicky následoval stejný standard, ačkoli první zařízení s 90 Hz (OnePlus 7 Pro, 2019) a 120 Hz (Razer Phone, 2017) se objevila dříve. Dnes je 60fps minimálním prahem pro schválení v App Store a Google Play pro aplikace s animací, i když požadavky nejsou formálně zdokumentovány.
Měření FPS — první krok optimalizace. Bez objektivních metrik nelze určit, kde přesně se výkon ztrácí. Mobilní platformy poskytují vestavěné nástroje pro profilování a softwarová API pro měření frekvence snímků v reálném čase.
Android Studio Profiler a Xcode Instruments — hlavní nástroje pro analýzu FPS. Android Profiler zobrazuje GPU Render Time, Frame Rate a Jank (počet přeskočených snímků). Xcode Instruments obsahuje šablonu Core Animation, která zobrazuje frekvenci snímků, čas vykreslování a počet draw calls. Pro herní enginy poskytují Unity Profiler a Unreal Insights detailní rozpis času podle modulů.
// Android — měření FPS pomocí 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())
)
CADisplayLink v iOS a Choreographer v Androidu — systémové mechanismy synchronizující vykreslování s obnovovací frekvencí displeje. CADisplayLink volá metodu s každým novým snímkem a předává timestamp pro výpočet zpoždění. Choreographer v Androidu dělá totéž, ale podporuje zpětná volání pro různé fáze snímku: vstup, animace, treviz, vykreslování. Vývojář se může přihlásit k odběru Choreographer.FrameCallback a měřit čas mezi snímky.
Stabilních 60fps znamená, že žádný snímek nepřekračuje rozpočet 16.7 ms. I jeden dlouhý snímek za sekundu vytváří znatelné škubání. Optimalizace se dělí na tři úrovně: CPU, GPU a paměť. Každá z nich se může stát úzkým hrdlem.
Layout pass — jeden z hlavních spotřebitelů času CPU na Androidu a iOS. Složitá hierarchie View, vnořené ConstraintLayout, těžké drawable vytvářejí dlouhé řetězce measure a layout. Pro UI aplikace používejte plochou hierarchii View (hloubka ne více než 3–4 úrovně), vnořené RecyclerView nahraďte ConcatAdapter a pro seznamy v iOS používejte compositional layout s prefetchingem.
| Operace | Typický čas | Dopad při překročení |
|---|---|---|
| Layout | 1–3 ms | Škubání u složitých obrazovek |
| Draw | 2–8 ms | Překreslování, přeskakování snímků |
| GPU Render | 3–10 ms | Pokles FPS na polovinu |
| GC (sběr paměti) | 2–50 ms | Viditelné mikro-škubání |
Overdraw — vícenásobné vykreslování stejných pixelů. Každá vrstva View, pozadí, obrázek pod průhledným prvkem zvyšují počet pixelových operací. V Androidu používejte Debug GPU Overdraw v Developer Options, v iOS — Xcode Debug View Hierarchy. Snižte overdraw odstraněním nepotřebných pozadí a použitím opaque příznaků: v Androidu — @drawable s android:opaque, v iOS — isOpaque = true pro UIKit.View.
Draw calls — počet příkazů k vykreslení odeslaných GPU. Moderní mobilní GPU zpracovávají 200–400 draw calls na snímek při 60fps. Překročení tohoto čísla způsobuje pokles výkonu. Spojujte sprite do texturových atlasů, používejte batching a vyhýbejte se individuálnímu vykreslování každého prvku samostatným draw call.
GC pauzy — jedna z hlavních příčin nestabilního FPS v aplikacích JVM a Kotlin. Sběr paměti na Androidu může trvat 30–50 ms, což způsobuje přeskočení 2–3 po sobě jdoucích snímků. Vyhýbejte se alokacím v animačních smyčkách, používejte objektové fondy a předběžné přidělování paměti. Na iOS je problém méně kritický díky ARC, ale retain cycles a přetečení autorelease pool také vytvářejí mikro-pauzy.
Pro hry je 60fps nejen standardem, ale konkurenční výhodou. Výzkumy Newzoo (2024) ukazují, že hry s nestabilním FPS pod 60 dostávají o 40% více negativních recenzí v Google Play. Unity a Unreal Engine poskytují vestavěné profiler pro kontrolu času vykreslování: v Unity je to Frame Debugger, v Unreal — GPU Visualizer, které zobrazují přesný čas každého draw call a shaderu. Stabilních 60fps je obzvláště důležitý pro akční hry, kde každý přeskočený snímek může stát uživatele dokončení úrovně.
Displeje 90 Hz a 120 Hz mění laťku výkonu. Pro aplikace běžící na zařízeních ProMotion může být cílové FPS 120 a rozpočet snímku se zkracuje na 8.3 ms. To vyžaduje dvakrát efektivnější kód, zejména v draw calls a GPU vykreslování.
Výhoda vysokých frekvencí není jen v plynulosti: 120fps snižuje znatelné zpoždění vstupu o 8–10 ms, což je kritické pro hry a interaktivní aplikace. Rozdíl mezi 60 a 120fps však vyžaduje individuální přístup: pro UI aplikace (rolování, animace) může být 90fps optimálním kompromisem mezi plynulostí a spotřebou energie, protože vykreslování 120 snímků za sekundu spotřebovává o 30–40% více energie než 60.
Apple poskytuje API pro výběr preferované frekvence: preferredFramesPerSecond v CADisplayLink. Android do API 30 neposkytuje přímou kontrolu nad frekvencí, ale od Androidu 12 může vývojář nastavit RefreshRate přes WindowManager a požadovat 60, 90 nebo 120 Hz v závislosti na typu obsahu.
Často kladené otázky
30fps je vnímán jako trhání při rolování a animacích, protože každý snímek trvá 33.3 ms a oko stihne zaznamenat diskrétnost. 60fps poskytuje snímek každých 16.7 ms — pod prahem perzistence vidění pro většinu uživatelů.
Použijte profiler (Android Profiler, Xcode Instruments) a podívejte se na histogram frame time. Pokud se 90%+ snímků vejde do 16.7 ms bez výkyvů — FPS je stabilní. Jednotlivé výkyvy do 30–50 ms vytvářejí znatelné škubání.
Ano, ale vyžaduje to agresivní optimalizaci: nízké rozlišení vykreslování, jednoduché shadery, minimální počet draw calls, upuštění od průhlednosti a složitých stínů. Testujte na zařízeních nižší třídy — ukáží skutečný výkon.
Kvůli mechanismu VSync: pokud GPU nestihne dokončit snímek za 16.7 ms, zmešká VBlank a drží aktuální snímek dalších 16.7 ms. Fakticky se jeden snímek zobrazuje dva obnovovací cykly a FPS klesne přesně na polovinu.
Ano. I jednoduché rolování seznamů a přechodové animace vyžadují 60fps pro pohodlné vnímání. Uživatelé okamžitě zaznamenají zpomalení při swipích, a to snižuje hodnocení aplikace 2–3krát v subjektivních testech.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také