60fps i mobil utveckling: essens, funktionsprincip och påverkan på prestanda

Författare: IT Sectr Publicerad: 2026-04-01 Lästid: 8 min

60fps — är en frekvens på 60 bilder per sekund, där varje bild tar exakt 16.7 ms, vilket ger visuellt jämn rörelse. Enligt Android Game Optimization Guide anses stabila 60 FPS vara minimistandarden för bekväm animation i mobila applikationer. 16.7 ms — är tidsbudgeten för att rendera en bild som utvecklaren måste hålla för att uppnå 60 FPS.

Huvudsakligt

  • 60fps — standarden för jämn animation, där varje bild bearbetas på 16.7 ms
  • Frame time budget — den tillgängliga tiden för att rendera en bild, avgörande för stabil FPS
  • Hopp över bildrutor inträffar när GPU inte hinner bearbeta bilden inom de tilldelade 16.7 ms
  • Choreographer i Android och CADisplayLink i iOS synkroniserar renderingen med uppdateringsfrekvensen
  • Profilering — obligatorisk fas för att identifiera flaskhalsar som sänker FPS

Vad är 60fps

60fps (60 bilder per sekund, frames per second) — indikatorn på bildfrekvensen där displayen uppdaterar bilden 60 gånger per sekund. Det mänskliga ögat slutar särskilja diskreta bilder vid ungefär 50–60 Hz tack vare persistenseffekten i synen, vilket gör 60fps till den naturliga tröskeln för jämnhet för de flesta användare.

Varje bild vid 60fps har en fast tidsbudget på 16.67 ms. Denna budget omfattar all tid: från bearbetning av användarinmatning till rendering och utmatning på skärmen. Om någon operation — fysik, animation, rendering av en komplex scen — överskrider denna gräns, sjunker bildfrekvensen till 30fps eller lägre, vilket visuellt uppfattas som hackande.

Inom mobil utveckling var 60fps länge gränsen på grund av hårdvarubegränsningar: de flesta displayer fram till 2017 arbetade på 60 Hz. Med tillkomsten av 90 Hz och 120 Hz skärmar blev 60fps den lägre standarden, inte det övre målet. För UI-applikationer, video och de flesta casual-spel förblir 60fps dock målindikatorn för prestanda.

Varför just 60 bilder per sekund

60 Hz — frekvensen av växelström i elnäten i USA och Japan, som historiskt bestämde avsökningsfrekvensen för de första tv-standarderna NTSC. PAL-standarden använde 50 Hz på grund av det europeiska nätverket på 50 Hz. Denna historiska tröghet överfördes till datorskärmar och därefter till mobila displayer.

Synens fysiologi och persistens

Persistenseffekten — egenskapen hos människans syn att behålla bilden på näthinnan i cirka 30–50 ms efter att stimulus försvunnit. Vid 60fps kommer en ny bild var 16.7 ms — innan det persistenta spåret av den föregående bilden försvinner, vilket skapar illusionen av kontinuerlig rörelse. Forskning vid Cardiff University (2023) visar att stridspiloter kan urskilja en enskild bild vid 220 Hz, men för den genomsnittliga användaren är skillnaden mellan 60 och 120 Hz mycket mindre märkbar än mellan 30 och 60 Hz.

Industristandarder

Apple fastställde 60fps som standard för iOS 2007 med den första iPhone och behöll den fram till iPhone 13 Pro (2021). Android följde historiskt samma standard, även om de första enheterna med 90 Hz (OnePlus 7 Pro, 2019) och 120 Hz (Razer Phone, 2017) dök upp tidigare. Idag är 60fps minimitröskeln för att passera granskning i App Store och Google Play för applikationer med animation, även om kraven inte är formellt dokumenterade.

Hur man mäter och kontrollerar FPS

Mätning av FPS — första steget i optimering. Utan objektiva mått är det omöjligt att avgöra exakt var prestandan försvinner. Mobila plattformar erbjuder inbyggda profileringsverktyg och mjukvaru-API:er för att mäta bildfrekvensen i realtid.

Profileringsverktyg

Android Studio Profiler och Xcode Instruments — de huvudsakliga verktygen för FPS-analys. Android Profiler visar GPU Render Time, Frame Rate och Jank (antal hoppade bilder). Xcode Instruments innehåller mallen Core Animation som visar bildfrekvensen, renderingstiden och antalet draw calls. För spelmotorer erbjuder Unity Profiler och Unreal Insights en detaljerad uppdelning av tid per modul.

kotlin
// Android — mätning av FPS 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())
)

Mjukvarubegränsning av FPS

CADisplayLink i iOS och Choreographer i Android — systemmekanismer som synkroniserar renderingen med displayens uppdateringsfrekvens. CADisplayLink anropar metoden med varje ny bild och skickar en tidstämpel för att beräkna fördröjningen. Choreographer i Android gör samma sak men stödjer återanrop för olika faser av bilden: inmatning, animation, treviz, rendering. Utvecklaren kan prenumerera på Choreographer.FrameCallback och mäta tiden mellan bildrutor.

Optimering för stabila 60fps

Stabila 60fps innebär att ingen bild överskrider budgeten på 16.7 ms. Även en lång bild per sekund skapar märkbart hackande. Optimering är uppdelad i tre nivåer: CPU, GPU och minne. Var och en kan bli en flaskhals.

CPU-optimering: Layout och Measure

Layout pass — en av de största konsumenterna av CPU-tid på Android och iOS. Komplex View-hierarki, nästlade ConstraintLayout, tunga drawable skapar långa kedjor av measure och layout. För UI-applikationer, använd en platt View-hierarki (djup högst 3–4 nivåer), ersätt nästlade RecyclerView med ConcatAdapter och för listor i iOS, använd compositional layout med prefetching.

OperationTypisk tidPåverkan vid överskridning
Layout1–3 msHackande vid komplexa skärmar
Draw2–8 msOmritning, hopp över bildrutor
GPU Render3–10 msHalvering av FPS
GC (skräpinsamling)2–50 msSynliga mikro-hack

GPU-optimering: Overdraw och Draw Calls

Overdraw — upprepad rendering av samma pixlar. Varje View-lager, bakgrund, bild under ett transparent element ökar antalet pixeloperationer. I Android, använd Debug GPU Overdraw i Developer Options, i iOS — Xcode Debug View Hierarchy. Minska overdraw genom att ta bort onödiga bakgrunder och använda opaque-flaggorna: i Android — @drawable med android:opaque, i iOS — isOpaque = true för UIKit.View.

Draw calls — antalet renderingskommandon som skickas till GPU. Moderna mobila GPU:er bearbetar 200–400 draw calls per bild vid 60fps. Överskridande av detta antal orsakar prestandaförsämring. Slå ihop sprites i textur atlaser, använd batching och undvik individuell rendering av varje element genom en separat draw call.

Minne och skräpinsamling

GC-pauser — en av de främsta orsakerna till instabil FPS i JVM- och Kotlin-applikationer. Skräpinsamling på Android kan ta 30–50 ms, vilket orsakar hopp över 2–på varandra följande bilder. Undvik allokeringar i animationsloopar, använd objektpooler och förutseende minnesallokering. På iOS är problemet mindre kritiskt på grund av ARC, men retain-cykler och översvämning av autorelease pool skapar också mikro-pauser.

För spel är 60fps inte bara en standard utan en konkurrensfördel. Forskning från Newzoo (2024) visar att spel med instabil FPS under 60 får 40% fler negativa recensioner i Google Play. Unity och Unreal Engine erbjuder inbyggda profiler för kontroll av renderingstiden: i Unity är det Frame Debugger, i Unreal — GPU Visualizer, som visar den exakta tiden för varje draw call och shader. Stabil 60fps är särskilt viktigt för actionspel, där varje hoppad bild kan kosta användaren att klara en nivå.

Bortom 60fps och höga frekvenser

90 Hz och 120 Hz displayer förändrar prestandamålet. För applikationer som körs på ProMotion-enheter kan mål-FPS vara 120 och bildbudgeten minskas till 8.3 ms. Detta kräver dubbelt så effektiv kod, särskilt i draw calls och GPU-rendering.

Fördelen med höga frekvenser är inte bara i jämnhet: 120fps minskar märkbar inmatningsfördröjning med 8–10 ms, vilket är kritiskt för spel och interaktiva applikationer. Skillnaden mellan 60 och 120fps kräver dock ett individuellt tillvägagångssätt: för UI-applikationer (scrollning, animationer) kan 90fps vara en optimal kompromiss mellan jämnhet och energiförbrukning, eftersom rendering av 120 bilder per sekund förbrukar 30–40% mer energi än 60.

Apple tillhandahåller API för att välja önskad frekvens: preferredFramesPerSecond i CADisplayLink. Android fram till API 30 ger inte direkt kontroll över frekvensen, men från och med Android 12 kan utvecklaren ställa in RefreshRate via WindowManager och begära 60, 90 eller 120 Hz beroende på innehållstyp.

Vanliga frågor

Varför anses 60fps vara minimistandarden och inte 30?

30fps upplevs som ryckningar vid scrollning och animationer, eftersom varje bild hålls i 33.3 ms och ögat hinner uppfatta diskretionen. 60fps levererar en bild var 16.7 ms — under persistensgränsen för de flesta användare.

Hur avgör man att applikationen levererar stabil 60fps?

Använd en profiler (Android Profiler, Xcode Instruments) och titta på histogrammet för bildtiden. Om 90%+ av bilderna ryms inom 16.7 ms utan toppar — är FPS stabil. Enstaka toppar upp till 30–50 ms skapar märkbart hackande.

Går det att uppnå 60fps på budgetenheter?

Ja, men det kräver aggressiv optimering: låg renderingsupplösning, enkla shaders, minimalt antal draw calls, avstående från genomskinlighet och komplexa skuggor. Testa på lågprisenheter — de visar verklig prestanda.

Varför sjunker FPS med hälften (60 → 30) och inte gradvis?

På grund av VSync-mekanismen: om GPU inte kan slutföra bilden på 16.7 ms, missar den VBlank och håller den aktuella bilden i ytterligare 16.7 ms. I praktiken visas en bild under två uppdateringscykler och FPS sjunker exakt till hälften.

Är det värt att sträva efter 60fps i en enkel UI-applikation?

Ja. Även enkel scrollning av listor och övergångsanimationer kräver 60fps för bekväm upplevelse. Användare märker omedelbart förseningar vid svepningar, och detta sänker betyget för applikationen 2–3 gånger i subjektiva tester.

Sammanfattning

  • 60fps — standarden för jämn animation med en bildbudget på 16.7 ms
  • Frame time budget omfattar CPU, GPU och systemoperationer
  • Hopp över bildrutor inträffar när budgeten överskrids och uppfattas som hackande
  • Profilering — obligatorisk fas för att identifiera flaskhalsar
  • Overdraw och draw calls — de största konsumenterna av GPU-tid
  • GC-pauser på Android skapar instabil FPS på grund av allokeringar
  • På 120 Hz skärmar minskas bildbudgeten till 8.3 ms, vilket kräver dubbelt så effektiv kod

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också