60fps, her karenin tam olarak 16,7 ms sürdüğü, saniyede 60 karelik bir kare hızıdır ve görsel olarak akıcı hareket sağlar. Android Game Optimization Guide'a göre, istikrarlı 60 FPS, mobil uygulamalarda rahat animasyon için minimum standart olarak kabul edilir. 16,7 ms, geliştiricinin 60 FPS'ye ulaşmak için karşılaması gereken tek bir kareyi işlemek için zaman bütçesidir.
Önemli Noktalar
60fps (saniyede 60 kare, frames per second), ekranın görüntüyü saniyede 60 kez yenilediği kare hızının bir ölçüsüdür. İnsan gözü, görme kalıcılığı etkisi sayesinde yaklaşık 50–60 Hz'de ayrık kareleri ayırt etmeyi bırakır ve bu da 60fps'yi çoğu kullanıcı için doğal bir akıcılık eşiği haline getirir.
60fps'deki her karenin sabit bir zaman bütçesi 16,67 ms'dir. Bu bütçe her şeyi içerir: kullanıcı girişinin işlenmesinden işlemeye ve ekrana çıktıya kadar. Fizik, animasyon, karmaşık bir sahnenin işlenmesi gibi herhangi bir işlem bu sınırı aşarsa, kare hızı 30fps veya daha altına düşer ve görsel olarak takılma olarak algılanır.
Mobil geliştirmede, 60fps donanım kısıtlamaları nedeniyle uzun süre sınır olarak kaldı: 2017'den önceki çoğu ekran 60 Hz'de çalışıyordu. 90 Hz ve 120 Hz ekranların ortaya çıkmasıyla birlikte, 60fps üst hedef olmaktan çıkıp alt standart haline geldi. Bununla birlikte, UI uygulamaları, video ve çoğu sıradan oyun için 60fps, performansın hedef göstergesi olmaya devam etmektedir.
60 Hz, ABD ve Japonya elektrik şebekelerindeki alternatif akım frekansıdır ve tarihsel olarak ilk NTSC televizyon standartlarının yenileme hızını belirlemiştir. PAL standardı, Avrupa 50 Hz şebekesi nedeniyle 50 Hz kullanmıştır. Bu tarihsel atalet, bilgisayar monitörlerine ve daha sonra mobil ekranlara geçmiştir.
Kalıcılık etkisi, uyaran kaybolduktan sonra görüntüyü retinada yaklaşık 30–50 ms tutan insan görüşünün bir özelliğidir. 60fps'de, önceki karenin kalıcı izi kaybolmadan önce her 16,7 ms'de yeni bir kare gelir ve sürekli hareket yanılsaması yaratır. Cardiff Üniversitesi (2023) araştırmaları, savaş pilotlarının 220 Hz'de tek bir kareyi ayırt edebildiğini, ancak ortalama bir kullanıcı için 60 ile 120 Hz arasındaki farkın, 30 ile 60 Hz arasındaki farktan çok daha az fark edilir olduğunu göstermektedir.
Apple, 2007'de ilk iPhone ile iOS için 60fps'yi standart olarak belirledi ve iPhone 13 Pro'ya (2021) kadar korudu. Android tarihsel olarak aynı standardı izledi, ancak 90 Hz (OnePlus 7 Pro, 2019) ve 120 Hz (Razer Phone, 2017) ile ilk cihazlar daha önce ortaya çıktı. Bugün, 60fps, animasyonlu uygulamalar için App Store ve Google Play incelemesini geçmek için minimum eşiktir, ancak resmi gereksinimler belgelenmemiştir.
FPS ölçümü optimizasyonun ilk adımıdır. Nesnel metrikler olmadan, performansın nerede kaybolduğunu belirlemek imkansızdır. Mobil platformlar, gerçek zamanlı olarak kare hızını ölçmek için yerleşik profilleme araçları ve yazılım API'leri sağlar.
Android Studio Profiler ve Xcode Instruments, FPS analizi için ana araçlardır. Android Profiler, GPU İşleme Süresi, Kare Hızı ve Jank'ı (düşen kare sayısı) gösterir. Xcode Instruments, kare hızını, işleme süresini ve draw call sayısını görüntüleyen Core Animation şablonunu içerir. Oyun motorları için Unity Profiler ve Unreal Insights, modüle göre ayrıntılı zaman dökümleri sağlar.
// Android — FrameMetrics ile FPS ölçümü
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())
)
iOS'te CADisplayLink ve Android'de Choreographer, işlemeyi ekran yenileme hızıyla senkronize eden sistem mekanizmalarıdır. CADisplayLink, gecikme hesaplaması için bir zaman damgası ileterek her yeni karede bir yöntemi çağırır. Android'de Choreographer aynısını yapar ancak farklı kare aşamaları için geri aramaları destekler: giriş, animasyon, geçiş, işleme. Geliştirici, Choreographer.FrameCallback'e abone olabilir ve kareler arasındaki süreyi ölçebilir.
İstikrarlı 60fps, hiçbir karenin 16,7 ms bütçesini aşmadığı anlamına gelir. Saniyede tek bir uzun kare bile fark edilir takılma yaratır. Optimizasyon üç seviyeye ayrılır: CPU, GPU ve bellek. Bunların her biri darboğaz haline gelebilir.
Layout geçişi, Android ve iOS'te CPU süresinin ana tüketicilerinden biridir. Karmaşık View hiyerarşileri, iç içe ConstraintLayout'lar ve ağır drawable'lar uzun measure ve layout zincirleri oluşturur. UI uygulamaları için düz View hiyerarşisi (derinlik 3–4 seviyeden fazla olmayan) kullanın, iç içe RecyclerView'ları ConcatAdapter ile değiştirin ve iOS'teki listeler için — önceden getirme ile compositional layout kullanın.
| İşlem | Tipik Süre | Aşıldığında Etki |
|---|---|---|
| Layout | 1–3 ms | Karmaşık ekranlarda takılma |
| Draw | 2–8 ms | Yeniden çizim, kare düşmesi |
| GPU Render | 3–10 ms | FPS'nin yarıya düşmesi |
| GC (çöp toplama) | 2–50 ms | Gözle fark edilir mikro takılmalar |
Overdraw, aynı piksellerin tekrar tekrar işlenmesidir. Her View katmanı, arka plan, şeffaf bir öğenin altındaki görüntü piksel işlemlerinin sayısını artırır. Android'de Geliştirici Seçenekleri'nde Debug GPU Overdraw'ı kullanın; iOS'te — Xcode Debug View Hierarchy. Gereksiz arka planları kaldırarak ve opak bayraklar kullanarak overdraw'ı azaltın: Android'de — android:opaque ile @drawable, iOS'te — UIKit.View için isOpaque = true.
Draw call'lar, GPU'ya gönderilen işleme komutlarının sayısıdır. Modern mobil GPU'lar, 60fps'de kare başına 200–400 draw call işler. Bu sayının aşılması performans düşüşüne neden olur. Sprite'ları doku atlaslarında birleştirin, toplu işleme kullanın ve her bir öğenin ayrı bir draw call aracılığıyla bireysel olarak işlenmesinden kaçının.
GC donmaları, JVM ve Kotlin uygulamalarında istikrarsız FPS'nin ana nedenlerinden biridir. Android'de çöp toplama 30–50 ms kadar sürebilir ve art arda 2–3 karenin atlanmasına neden olur. Animasyon döngülerinde tahsislerden kaçının, nesne havuzları kullanın ve belleği önceden tahsis edin. iOS'te, ARC sayesinde sorun daha az kritiktir, ancak tutma döngüleri ve otomatik yayınlama havuzu taşmaları da mikro takılmalar yaratır.
Oyunlar için 60fps sadece bir standart değil, rekabet avantajıdır. Newzoo (2024) araştırmaları, 60'ın altında istikrarsız FPS'ye sahip oyunların Google Play'de %40 daha fazla olumsuz yorum aldığını göstermektedir. Unity ve Unreal Engine, işleme süresini izlemek için yerleşik profilleyiciler sağlar: Unity'de Frame Debugger, Unreal'de — GPU Visualizer, her draw call ve shader'ın tam süresini gösterir. İstikrarlı 60fps, özellikle aksiyon oyunları için önemlidir; burada düşen her kare, kullanıcının bir seviyeyi tamamlamasına mal olabilir.
90 Hz ve 120 Hz ekranlar, hedef performans çıtasını değiştiriyor. ProMotion cihazlarda çalışan uygulamalar için hedef FPS 120 olabilir ve kare bütçesi 8,3 ms'ye düşer. Bu, özellikle draw call'lar ve GPU işlemede iki kat daha verimli kod gerektirir.
Yüksek frekansların avantajı sadece akıcılık değildir: 120fps, algılanabilir giriş gecikmesini 8–10 ms azaltır ve bu, oyunlar ve etkileşimli uygulamalar için kritiktir. Bununla birlikte, 60 ve 120fps arasındaki fark bireysel bir yaklaşım gerektirir: UI uygulamaları (kaydırma, animasyonlar) için 90fps, akıcılık ve güç tüketimi arasında optimal bir uzlaşma olabilir; çünkü saniyede 120 kare işlemek, 60'a kıyasla %30–40 daha fazla enerji tüketir.
Apple, tercih edilen kare hızını seçmek için bir API sağlar: CADisplayLink'te preferredFramesPerSecond. Android, API 30'dan önce yenileme hızı üzerinde doğrudan kontrol sağlamıyordu, ancak Android 12'den itibaren geliştirici, içerik türüne bağlı olarak 60, 90 veya 120 Hz talep ederek WindowManager aracılığıyla RefreshRate'i ayarlayabilir.
Sıkça Sorulan Sorular
30fps, kaydırma ve animasyonlar sırasında takılma olarak algılanır çünkü her kare 33,3 ms sürer ve göz ayrıklığı fark eder. 60fps, her 16,7 ms'de bir kare sağlar — çoğu kullanıcı için görme kalıcılığı eşiğinin altında.
Bir profilleyici (Android Profiler, Xcode Instruments) kullanın ve kare süresi histogramına bakın. Karelerin %90'ından fazlası ani yükselişler olmadan 16,7 ms'ye sığıyorsa — FPS istikrarlıdır. 30–50 ms'ye kadar olan izole ani yükselişler fark edilir takılma yaratır.
Evet, ancak agresif optimizasyon gerekir: düşük işleme çözünürlüğü, basit gölgelendiriciler, minimum draw call, şeffaflık ve karmaşık gölgelerden kaçınma. Alt segment cihazlarda test edin — gerçek performansı göstereceklerdir.
VSync mekanizması nedeniyle: GPU 16,7 ms içinde bir kareyi tamamlayamazsa, VBlank'ı kaçırır ve mevcut kareyi 16,7 ms daha tutar. Etkili olarak, bir kare iki yenileme döngüsü boyunca gösterilir ve FPS tam olarak yarıya düşer.
Evet. Basit liste kaydırma ve geçiş animasyonları bile rahat bir deneyim için 60fps gerektirir. Kullanıcılar kaydırma sırasında takılmayı anında fark eder ve bu, öznel testlerde uygulamanın puanını 2–3 kat düşürür.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun