60fps — is een frequentie van 60 frames per seconde, waarbij elk frame exact 16.7 ms duurt en visueel vloeiende beweging mogelijk maakt. Volgens de Android Game Optimization Guide wordt stabiele 60 FPS beschouwd als de minimale standaard voor comfortabele animatie in mobiele applicaties. 16.7 ms — is het tijdbudget voor het renderen van één frame dat de ontwikkelaar moet halen om 60 FPS te bereiken.
Belangrijkste
60fps (60 frames per seconde) — de indicator van de framesnelheid waarbij het beeldscherm het beeld 60 keer per seconde ververst. Het menselijk oog stopt met het onderscheiden van discrete frames bij ongeveer 50–60 Hz dankzij het persistentie-effect van het gezichtsvermogen, waardoor 60fps de natuurlijke vloeiendheidsdrempel is voor de meeste gebruikers.
Elk frame bij 60fps heeft een vast tijdbudget van 16.67 ms. Dit budget omvat alle tijd: van verwerking van gebruikersinvoer tot rendering en weergave op het scherm. Als een bewerking — fysica, animatie, tekenen van een complexe scène — deze limiet overschrijdt, daalt de framesnelheid naar 30fps of lager, wat visueel wordt waargenomen als haperen.
In mobiele ontwikkeling was 60fps lange tijd de limiet vanwege hardwarebeperkingen: de meeste beeldschermen werkten tot 2017 op 60 Hz. Met de komst van 90 Hz en 120 Hz schermen werd 60fps de onderste standaard, niet het bovenste doel. Voor UI-applicaties, video en de meeste casual games blijft 60fps echter de doelindicator voor prestaties.
60 Hz — de frequentie van wisselstroom in elektriciteitsnetwerken van de VS en Japan, die historisch de scansnelheid van de eerste NTSC-televisiestandaarden bepaalde. De PAL-standaard gebruikte 50 Hz vanwege het Europese netwerk van 50 Hz. Deze historische traagheid ging over op computermonitoren en vervolgens op mobiele beeldschermen.
Het persistentie-effect — de eigenschap van het menselijk gezichtsvermogen om een beeld ongeveer 30–50 ms op het netvlies te behouden nadat de stimulus is verdwenen. Bij 60fps komt er elke 16.7 ms een nieuw frame — voordat het persistentiespoor van het vorige frame verdwijnt, waardoor de illusie van continue beweging ontstaat. Onderzoek van Cardiff University (2023) toont aan dat gevechtspiloten een enkel frame kunnen onderscheiden bij 220 Hz, maar voor de gemiddelde gebruiker is het verschil tussen 60 en 120 Hz veel minder merkbaar dan tussen 30 en 60 Hz.
Apple stelde 60fps als standaard voor iOS in 2007 met de eerste iPhone en handhaafde dit tot de iPhone 13 Pro (2021). Android volgde historisch dezelfde standaard, hoewel de eerste apparaten met 90 Hz (OnePlus 7 Pro, 2019) en 120 Hz (Razer Phone, 2017) eerder verschenen. Tegenwoordig is 60fps de minimale drempel voor het doorstaan van de review in de App Store en Google Play voor applicaties met animatie, hoewel de vereisten niet formeel zijn gedocumenteerd.
FPS meten — de eerste stap van optimalisatie. Zonder objectieve meetgegevens is het onmogelijk te bepalen waar precies prestaties verloren gaan. Mobiele platforms bieden ingebouwde profileringsinstrumenten en software-API's voor het meten van de framesnelheid in realtime.
Android Studio Profiler en Xcode Instruments — de belangrijkste hulpmiddelen voor FPS-analyse. Android Profiler toont GPU Render Time, Frame Rate en Jank (aantal overgeslagen frames). Xcode Instruments bevat het Core Animation-sjabloon dat de framesnelheid, renderingtijd en het aantal draw calls weergeeft. Voor game-engines bieden Unity Profiler en Unreal Insights een gedetailleerde uitsplitsing van tijd per module.
// Android — FPS meten via 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 in iOS en Choreographer in Android — systeemmechanismen die het tekenen synchroniseren met de verversingssnelheid van het beeldscherm. CADisplayLink roept de methode aan bij elk nieuw frame en geeft een timestamp door voor het berekenen van vertraging. Choreographer in Android doet hetzelfde, maar ondersteunt callbacks voor verschillende fasen van het frame: invoer, animatie, treviz, rendering. De ontwikkelaar kan zich abonneren op Choreographer.FrameCallback en de tijd tussen frames meten.
Stabiele 60fps betekent dat geen enkel frame het budget van 16.7 ms overschrijdt. Zelfs één lang frame per seconde creëert merkbaar haperen. Optimalisatie is verdeeld over drie niveaus: CPU, GPU en geheugen. Elk ervan kan een knelpunt worden.
Layout pass — een van de grootste verbruikers van CPU-tijd op Android en iOS. Complexe View-hiërarchie, geneste ConstraintLayout, zware drawable creëren lange ketens van measure en layout. Gebruik voor UI-applicaties een platte View-hiërarchie (diepte niet meer dan 3–4 niveaus), vervang geneste RecyclerView door ConcatAdapter en gebruik voor lijsten in iOS compositional layout met prefetching.
| Bewerking | Typische tijd | Impact bij overschrijding |
|---|---|---|
| Layout | 1–3 ms | Haperen bij complexe schermen |
| Draw | 2–8 ms | Hertekenen, frame-overslaan |
| GPU Render | 3–10 ms | FPS halvering |
| GC (garbage collection) | 2–50 ms | Zichtbare micro-haperingen |
Overdraw — het meerdere keren tekenen van dezelfde pixels. Elke View-laag, achtergrond, afbeelding onder een transparant element verhogen het aantal pixelbewerkingen. Gebruik in Android Debug GPU Overdraw in Developer Options, in iOS — Xcode Debug View Hierarchy. Verminder overdraw door onnodige achtergronden te verwijderen en opaque-vlaggen te gebruiken: in Android — @drawable met android:opaque, in iOS — isOpaque = true voor UIKit.View.
Draw calls — het aantal tekenopdrachten dat naar de GPU wordt gestuurd. Moderne mobiele GPU's verwerken 200–400 draw calls per frame bij 60fps. Overschrijding van dit aantal veroorzaakt prestatieverlies. Voeg sprites samen in textuuratlassen, gebruik batching en vermijd individueel tekenen van elk element via een aparte draw call.
GC-pauzes — een van de belangrijkste oorzaken van instabiele FPS in JVM- en Kotlin-applicaties. Garbage collection op Android kan 30–50 ms duren, waardoor 2–3 frames achter elkaar worden overgeslagen. Vermijd allocaties in animatielussen, gebruik object pools en vooraf geheugen toewijzen. Op iOS is het probleem minder kritisch vanwege ARC, maar retain cycles en overloop van de autorelease pool creëren ook micro-pauzes.
Voor games is 60fps niet alleen een standaard, maar een concurrentievoordeel. Onderzoek van Newzoo (2024) toont aan dat games met instabiele FPS onder de 60 40% meer negatieve recensies krijgen in Google Play. Unity en Unreal Engine bieden ingebouwde profilers voor het controleren van de renderingtijd: in Unity is dit Frame Debugger, in Unreal — GPU Visualizer, die de exacte tijd van elke draw call en shader weergeven. Stabiele 60fps is vooral belangrijk voor actiegames, waar elk overgeslagen frame de gebruiker het voltooien van een level kan kosten.
90 Hz en 120 Hz beeldschermen veranderen de prestatielat. Voor applicaties die op ProMotion-apparaten draaien, kan de doel-FPS 120 zijn en het framebudget wordt teruggebracht tot 8.3 ms. Dit vereist twee keer zo efficiënte code, vooral in draw calls en GPU-rendering.
Het voordeel van hoge frequenties zit niet alleen in vloeiendheid: 120fps vermindert merkbare input lag met 8–10 ms, wat cruciaal is voor games en interactieve applicaties. Het verschil tussen 60 en 120fps vereist echter een individuele benadering: voor UI-applicaties (scrollen, animaties) kan 90fps een optimaal compromis zijn tussen vloeiendheid en energieverbruik, omdat het renderen van 120 frames per seconde 30–40% meer energie verbruikt dan 60.
Apple biedt een API voor het selecteren van de voorkeursfrequentie: preferredFramesPerSecond in CADisplayLink. Android biedt tot API 30 geen directe controle over de frequentie, maar vanaf Android 12 kan de ontwikkelaar RefreshRate instellen via WindowManager, waarbij 60, 90 of 120 Hz wordt aangevraagd afhankelijk van het type inhoud.
Veelgestelde vragen
30fps wordt ervaren als schokken tijdens scrollen en animaties, omdat elk frame 33.3 ms wordt vastgehouden en het oog de discretie kan opmerken. 60fps levert elke 16.7 ms een frame — onder de persistentiedrempel van het gezichtsvermogen voor de meeste gebruikers.
Gebruik een profiler (Android Profiler, Xcode Instruments) en bekijk het histogram van de frametijd. Als 90%+ van de frames binnen 16.7 ms valt zonder uitschieters — is de FPS stabiel. Enkele uitschieters tot 30–50 ms creëren merkbaar haperen.
Ja, maar dit vereist agressieve optimalisatie: lage renderresolutie, eenvoudige shaders, minimaal aantal draw calls, afzien van transparantie en complexe schaduwen. Test op instapmodellen — ze tonen de echte prestaties.
Vanwege het VSync-mechanisme: als de GPU het frame niet binnen 16.7 ms kan voltooien, mist hij VBlank en houdt hij het huidige frame nog 16.7 ms vast. In feite wordt één frame twee verversingscycli weergegeven en daalt de FPS precies met de helft.
Ja. Zelfs eenvoudig scrollen door lijsten en overgangsanimaties vereisen 60fps voor comfortabele waarneming. Gebruikers merken direct vertragingen bij swipes op, en dit verlaagt de beoordeling van de applicatie met 2–3 keer in subjectieve tests.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook