60fps — adalah frekuensi 60 frame per detik, di mana setiap frame memakan waktu tepat 16.7 ms, memberikan gerakan visual yang halus. Menurut Android Game Optimization Guide, 60 FPS yang stabil dianggap sebagai standar minimum animasi yang nyaman di aplikasi mobile. 16.7 ms — adalah anggaran waktu untuk rendering satu frame yang harus dipenuhi pengembang untuk mencapai 60 FPS.
Utama
60fps (60 frame per detik, frames per second) — indikator frekuensi perubahan frame, di mana layar menyegarkan gambar 60 kali setiap detik. Mata manusia berhenti membedakan frame diskrit pada sekitar 50–60 Hz berkat efek persistensi penglihatan, menjadikan 60fps sebagai ambang kehalusan alami bagi sebagian besar pengguna.
Setiap frame pada 60fps memiliki anggaran waktu tetap sebesar 16.67 ms. Anggaran ini mencakup semua waktu: dari pemrosesan input pengguna hingga rendering dan keluaran ke layar. Jika operasi apa pun — fisika, animasi, penggambaran adegan kompleks — melebihi batas ini, frekuensi frame turun menjadi 30fps atau lebih rendah, yang secara visual dirasakan sebagai kegagapan.
Dalam pengembangan mobile, 60fps untuk waktu lama adalah batas karena keterbatasan perangkat keras: sebagian besar layar hingga 2017 bekerja pada 60 Hz. Dengan munculnya layar 90 Hz dan 120 Hz, 60fps menjadi standar bawah, bukan target atas. Namun untuk aplikasi UI, video, dan sebagian besar game kasual, 60fps tetap menjadi indikator target kinerja.
60 Hz — frekuensi arus bolak-balik di jaringan listrik AS dan Jepang, yang secara historis menentukan frekuensi pemindaian standar televisi NTSC pertama. Standar PAL menggunakan 50 Hz karena jaringan Eropa 50 Hz. Inersia historis ini berpindah ke monitor komputer dan kemudian ke layar mobile.
Efek persistensi — sifat penglihatan manusia untuk mempertahankan gambar pada retina selama sekitar 30–50 ms setelah stimulus menghilang. Pada 60fps, frame baru datang setiap 16.7 ms — lebih awal dari hilangnya jejak persistensi frame sebelumnya, menciptakan ilusi gerakan berkelanjutan. Penelitian Universitas Cardiff (2023) menunjukkan bahwa pilot pesawat tempur dapat membedakan satu frame pada 220 Hz, tetapi bagi pengguna biasa perbedaan antara 60 dan 120 Hz jauh kurang terlihat daripada antara 30 dan 60 Hz.
Apple menetapkan 60fps sebagai standar untuk iOS pada tahun 2007 dengan iPhone pertama dan mempertahankannya hingga iPhone 13 Pro (2021). Android secara historis mengikuti standar yang sama, meskipun perangkat pertama dengan 90 Hz (OnePlus 7 Pro, 2019) dan 120 Hz (Razer Phone, 2017) muncul lebih awal. Saat ini 60fps adalah ambang minimum untuk lulus review di App Store dan Google Play untuk aplikasi dengan animasi, meskipun persyaratannya tidak didokumentasikan secara formal.
Pengukuran FPS — langkah pertama optimasi. Tanpa metrik objektif tidak mungkin menentukan di mana tepatnya kinerja hilang. Platform mobile menyediakan alat profiling bawaan dan API perangkat lunak untuk mengukur frekuensi frame secara real-time.
Android Studio Profiler dan Xcode Instruments — alat utama untuk analisis FPS. Android Profiler menunjukkan GPU Render Time, Frame Rate dan Jank (jumlah frame yang dilewatkan). Xcode Instruments mencakup template Core Animation yang menampilkan frekuensi frame, waktu rendering, dan jumlah draw calls. Untuk mesin game, Unity Profiler dan Unreal Insights memberikan rincian waktu yang detail per modul.
// Android — pengukuran FPS melalui 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 di iOS dan Choreographer di Android — mekanisme sistem yang menyinkronkan penggambaran dengan frekuensi penyegaran layar. CADisplayLink memanggil metode dengan setiap frame baru, mengirimkan timestamp untuk menghitung penundaan. Choreographer di Android melakukan hal yang sama, tetapi mendukung panggilan balik untuk fase frame yang berbeda: input, animasi, treviz, rendering. Pengembang dapat berlangganan Choreographer.FrameCallback dan mengukur waktu antara frame.
60fps stabil berarti tidak ada frame yang melebihi anggaran 16.7 ms. Bahkan satu frame panjang per detik menciptakan kegagapan yang terlihat. Optimasi dibagi menjadi tiga tingkat: CPU, GPU dan memori. Masing-masing dapat menjadi hambatan.
Layout pass — salah satu konsumen utama waktu CPU di Android dan iOS. Hierarki View yang kompleks, ConstraintLayout bersarang, drawable berat menciptakan rantai panjang measure dan layout. Untuk aplikasi UI, gunakan hierarki View yang datar (kedalaman tidak lebih dari 3–4 tingkat), ganti RecyclerView bersarang dengan ConcatAdapter, dan untuk daftar di iOS gunakan compositional layout dengan prefetching.
| Operasi | Waktu tipikal | Dampak saat terlampaui |
|---|---|---|
| Layout | 1–3 ms | Kegagapan di layar kompleks |
| Draw | 2–8 ms | Penggambaran ulang, lemparan frame |
| GPU Render | 3–10 ms | Penurunan FPS setengahnya |
| GC (pengumpulan sampah) | 2–50 ms | Mikro-kegagapan terlihat |
Overdraw — penggambaran berulang pixel yang sama. Setiap lapisan View, latar belakang, gambar di bawah elemen transparan meningkatkan jumlah operasi pixel. Di Android, gunakan Debug GPU Overdraw di Developer Options, di iOS — Xcode Debug View Hierarchy. Kurangi overdraw dengan menghapus latar belakang yang tidak perlu dan menggunakan flag opaque: di Android — @drawable dengan android:opaque, di iOS — isOpaque = true untuk UIKit.View.
Draw calls — jumlah perintah penggambaran yang dikirim ke GPU. GPU mobile modern memproses 200–400 draw calls per frame pada 60fps. Melebihi angka ini menyebabkan penurunan kinerja. Gabungkan sprite dalam atlas tekstur, gunakan batching dan hindari penggambaran individu setiap elemen melalui draw call terpisah.
Jeda GC — salah satu penyebab utama FPS tidak stabil di aplikasi JVM dan Kotlin. Pengumpulan sampah di Android dapat memakan waktu 30–50 ms, menyebabkan lemparan 2–3 frame berturut-turut. Hindari alokasi di loop animasi, gunakan pool objek dan alokasi memori di muka. Di iOS masalahnya kurang kritis karena ARC, tetapi retain cycles dan luapan autorelease pool juga menciptakan mikro-jeda.
Untuk game, 60fps bukan hanya standar, tetapi keunggulan kompetitif. Penelitian Newzoo (2024) menunjukkan bahwa game dengan FPS tidak stabil di bawah 60 mendapat 40% lebih banyak ulasan negatif di Google Play. Unity dan Unreal Engine menyediakan profiler bawaan untuk mengontrol waktu rendering: di Unity ini Frame Debugger, di Unreal — GPU Visualizer, yang menunjukkan waktu yang tepat dari setiap draw call dan shader. 60fps stabil sangat penting untuk game aksi, di mana setiap frame yang dilewatkan dapat membuat pengguna kehilangan level.
Layar 90 Hz dan 120 Hz mengubah target kinerja. Untuk aplikasi yang berjalan di perangkat ProMotion, FPS target bisa 120, dan anggaran frame berkurang menjadi 8.3 ms. Ini membutuhkan kode dua kali lebih efisien, terutama dalam draw calls dan rendering GPU.
Keuntungan frekuensi tinggi tidak hanya dalam kehalusan: 120fps mengurangi input lag yang terlihat sebesar 8–10 ms, yang penting untuk game dan aplikasi interaktif. Namun perbedaan antara 60 dan 120fps memerlukan pendekatan individual: untuk aplikasi UI (scrolling, animasi) 90fps bisa menjadi kompromi optimal antara kehalusan dan konsumsi energi, karena rendering 120 frame per detik mengonsumsi 30–40% lebih banyak energi daripada 60.
Apple menyediakan API untuk memilih frekuensi preferensi: preferredFramesPerSecond di CADisplayLink. Android hingga API 30 tidak memberikan kontrol langsung atas frekuensi, tetapi mulai Android 12 pengembang dapat mengatur RefreshRate melalui WindowManager, meminta 60, 90 atau 120 Hz tergantung pada jenis konten.
Pertanyaan yang sering diajukan
30fps dirasakan sebagai tersendat saat scrolling dan animasi, karena setiap frame bertahan 33.3 ms, dan mata sempat melihat diskretisasi. 60fps memberikan frame setiap 16.7 ms — di bawah ambang persistensi penglihatan bagi sebagian besar pengguna.
Gunakan profiler (Android Profiler, Xcode Instruments) dan lihat histogram frame time. Jika 90%+ frame masuk dalam 16.7 ms tanpa lonjakan — FPS stabil. Lonjakan tunggal hingga 30–50 ms menciptakan kegagapan yang terlihat.
Ya, tetapi ini membutuhkan optimasi agresif: resolusi rendering rendah, shader sederhana, jumlah draw calls minimal, meninggalkan transparansi dan bayangan kompleks. Uji di perangkat kelas bawah — mereka akan menunjukkan kinerja nyata.
Karena mekanisme VSync: jika GPU tidak dapat menyelesaikan frame dalam 16.7 ms, ia melewatkan VBlank dan menahan frame saat ini selama 16.7 ms lagi. Secara efektif satu frame ditampilkan dua siklus penyegaran, dan FPS turun tepat setengahnya.
Ya. Bahkan scrolling daftar sederhana dan animasi transisi memerlukan 60fps untuk persepsi yang nyaman. Pengguna langsung melihat perlambatan saat swipe, dan ini menurunkan peringkat aplikasi 2–3 kali lipat dalam tes subjektif.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga