60fps — saniyədə 60 kadr tezliyidir, burada hər kadr dəqiq 16.7 ms çəkir, vizual olaraq hamar hərəkət təmin edir. Android Game Optimization Guide-a görə, sabit 60 FPS mobil tətbiqlərdə rahat animasiyanın minimum standartı hesab olunur. 16.7 ms — 60 FPS-ə nail olmaq üçün tərtibatçının bir kadrın render edilməsinə sərf etməli olduğu vaxt büdcəsidir.
Başlıca
60fps (saniyədə 60 kadr, frames per second) — displeyin şəkli hər saniyə 60 dəfə yenilədiyi kadr dəyişmə tezliyi göstəricisidir. İnsan gözü görmə persistensiyası effekti sayəsində təxminən 50–60 Hz-də diskret kadrları ayırd etməyi dayandırır, bu da 60fps-i əksər istifadəçilər üçün təbii hamarlıq həddinə çevirir.
60fps-də hər kadrın sabit vaxt büdcəsi 16.67 ms təşkil edir. Bu büdcəyə bütün vaxt daxildir: istifadəçi girişinin emalından render və ekrana çıxışa qədər. Hər hansı əməliyyat — fizika, animasiya, mürəkkəb səhnənin çəkilməsi — bu həddi aşarsa, kadr tezliyi 30fps və ya daha aşağı düşər, bu da vizual olaraq tərəddüd kimi qəbul edilir.
Mobil inkişafda 60fps uzun müddət aparat məhdudiyyətləri səbəbindən hədd idi: 2017-ci ilə qədər əksər displeylər 60 Hz-də işləyirdi. 90 Hz və 120 Hz ekranların yaranması ilə 60fps aşağı standarta çevrildi, yuxarı hədəf deyil. Lakin UI tətbiqləri, video və əksər kazual oyunlar üçün 60fps hədəf göstərici olaraq qalır.
60 Hz — ABŞ və Yaponiya elektrik şəbəkələrində alternativ cərəyan tezliyi, tarixən ilk NTSC televiziya standartlarının süpürgərmə tezliyini müəyyənləşdirmişdir. PAL standartı Avropa şəbəkəsi 50 Hz səbəbindən 50 Hz istifadə edirdi. Bu tarixi ətalət kompüter monitorlarına və sonra mobil displeylərə keçmişdir.
Persistensiya effekti — insan görməsinin stimul yox olduqdan sonra təxminən 30–50 ms ərzində şəkli göz torunda saxlama xüsusiyyəti. 60fps-də yeni kadr hər 16.7 ms-də gəlir — əvvəlki kadrın persistensiya izi yox olmazdan əvvəl, fasiləsiz hərəkət illüziyası yaradır. Kardiff Universitetinin (2023) tədqiqatları göstərir ki, qırıcı təyyarə pilotları 220 Hz-də tək kadrı ayırd edə bilir, lakin adi istifadəçi üçün 60 və 120 Hz arasındakı fərq 30 ilə 60 Hz arasındakından qat-qat az nəzərə çarpır.
Apple 2007-ci ildə ilk iPhone ilə iOS üçün 60fps standartını təyin etdi və iPhone 13 Pro (2021)-yə qədər qorudu. Android tarixən eyni standarta əməl etsə də, ilk 90 Hz (OnePlus 7 Pro, 2019) və 120 Hz (Razer Phone, 2017) cihazları daha əvvəl peyda oldu. Bu gün 60fps animasiyalı tətbiqlər üçün App Store və Google Play-dən keçmək üçün minimum hədd olsa da, formal olaraq tələblər sənədləşdirilməyib.
FPS ölçümü — optimallaşdırmanın ilk addımıdır. Obyektiv metrikalar olmadan performansın harada itirildiyini müəyyənləşdirmək mümkün deyil. Mobil platformalar real vaxtda kadr tezliyini ölçmək üçün daxili profilinq alətləri və proqram API-ləri təmin edir.
Android Studio Profiler və Xcode Instruments — FPS analizi üçün əsas alətlər. Android Profiler GPU Render Time, Frame Rate və Jank-ı (ötürülmüş kadrların sayı) göstərir. Xcode Instruments kadr tezliyini, render vaxtını və draw calls sayını göstərən Core Animation şablonunu ehtiva edir. Oyun mühərrikləri üçün Unity Profiler və Unreal Insights modullar üzrə vaxtın ətraflı bölgüsünü təmin edir.
// Android — FPS ölçümü FrameMetrics vasitəsilə
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 iOS-da və Choreographer Android-də çəkimi displeyin yenilənmə tezliyi ilə sinxronlaşdıran sistem mexanizmləridir. CADisplayLink hər yeni kadrla metodu çağırır, gecikməni hesablamaq üçün timestamp ötürür. Android-də Choreographer eyni şeyi edir, lakin kadrın müxtəlif fazaları üçün geri çağırışları dəstəkləyir: giriş, animasiya, treviz, render. Tərtibatçı Choreographer.FrameCallback-ə abunə ola və kadrlar arasındakı vaxtı ölçə bilər.
Sabit 60fps o deməkdir ki, heç bir kadr 16.7 ms büdcəsini aşmır. Saniyədə hətta bir uzun kadr nəzərə çarpan tərəddüd yaradır. Optimallaşdırma üç səviyyəyə bölünür: CPU, GPU və yaddaş. Onların hər biri darboğaz ola bilər.
Layout pass — Android və iOS-da CPU vaxtının əsas istehlakçılarından biridir. Mürəkkəb View iyerarxiyası, iç-içə ConstraintLayout, ağır drawable uzun measure və layout zəncirləri yaradır. UI tətbiqləri üçün düz View iyerarxiyası istifadə edin (dərinlik 3–4 səviyyədən çox olmamalıdır), iç-içə RecyclerView-i ConcatAdapter ilə əvəz edin və iOS-da siyahılar üçün prefetching ilə compositional layout istifadə edin.
| Əməliyyat | Tipik vaxt | Aşıldıqda təsir |
|---|---|---|
| Layout | 1–3 ms | Mürəkkəb ekranlarda tərəddüd |
| Draw | 2–8 ms | Yenidən çəkmə, kadr ötürülməsi |
| GPU Render | 3–10 ms | FPS-in 2 dəfə düşməsi |
| GC (zibil yığımı) | 2–50 ms | Gözlə görünən mikro-tərəddüdlər |
Overdraw — eyni piksellərin dəfələrlə çəkilməsi. Hər View qatı, fon, şəffaf element altındakı şəkil piksel əməliyyatlarının sayını artırır. Android-də Developer Options-da Debug GPU Overdraw istifadə edin, iOS-da — Xcode Debug View Hierarchy. Lazımsız fonları silərək və opaque bayraqlarından istifadə edərək overdraw-ı azaldın: Android-də android:opaque ilə @drawable, iOS-da UIKit.View üçün isOpaque = true.
Draw calls — GPU-ya göndərilən çəkmə əmrlərinin sayı. Müasir mobil GPU-lar 60fps-də hər kadrda 200–400 draw calls emal edir. Bu rəqəmin aşılması performansın düşməsinə səbəb olur. Sprite-ları tekstur atlaslarında birləşdirin, batchinqdən istifadə edin və hər elementin ayrıca draw call vasitəsilə fərdi çəkilməsindən qaçının.
GC dayanmaları — JVM və Kotlin tətbiqlərində qeyri-sabit FPS-in əsas səbəblərindən biridir. Android-də zibil yığımı 30–50 ms çəkə bilər, ardıcıl 2–3 kadrın ötürülməsinə səbəb olur. Animasiya dövrlərində ayırmalardan qaçının, obyekt hovuzları və əvvəlcədən yaddaş ayırma istifadə edin. iOS-da problem ARC səbəbindən daha az kritikdir, lakin retain cycles və autorelease pool daşması da mikro-dayanmalar yaradır.
Oyunlar üçün 60fps təkcə standart deyil, həm də rəqabət üstünlüyüdür. Newzoo (2024) tədqiqatları göstərir ki, 60-dan aşağı qeyri-sabit FPS olan oyunlar Google Play-də 40% daha çox mənfi rəy alır. Unity və Unreal Engine render vaxtına nəzarət üçün daxili profilerlər təmin edir: Unity-də bu Frame Debugger, Unreal-də — GPU Visualizer, hər draw call və shader-in dəqiq vaxtını göstərir. Sabit 60fps xüsusilə aksiyon oyunları üçün vacibdir, burada hər ötürülən kadr istifadəçiyə səviyyəni keçməyə başa gələ bilər.
90 Hz və 120 Hz displeylər performans hədəf çubuğunu dəyişdirir. ProMotion cihazlarında işləyən tətbiqlər üçün hədəf FPS 120 ola bilər, kadr büdcəsi isə 8.3 ms-ə qədər azalır. Bu, xüsusilə draw calls və GPU renderində iki dəfə daha səmərəli kod tələb edir.
Yüksək tezliklərin üstünlüyü təkcə hamarlıqda deyil: 120fps nəzərə çarpan input lag-ı 8–10 ms azaldır, bu da oyunlar və interaktiv tətbiqlər üçün kritikdir. Lakin 60 və 120fps arasındakı fərq fərdi yanaşma tələb edir: UI tətbiqləri (sürüşdürmə, animasiyalar) üçün 90fps hamarlıq və enerji istehlakı arasında optimal kompromis ola bilər, çünki saniyədə 120 kadrın render edilməsi 60-dan 30–40% daha çox enerji sərf edir.
Apple preferredFramesPerSecond ilə CADisplayLink-də üstünlük tezliyi seçmək üçün API təmin edir. Android API 30-dan əvvəl tezlik üzərində birbaşa nəzarət vermir, lakin Android 12-dən başlayaraq tərtibatçı məzmun növündən asılı olaraq 60, 90 və ya 120 Hz tələb edərək WindowManager vasitəsilə RefreshRate təyin edə bilər.
Tez-tez verilən suallar
30fps sürüşdürmə və animasiyalar zamanı sıçrayışlar kimi qəbul edilir, çünki hər kadr 33.3 ms saxlanılır və göz diskretliyi görməyə macal tapır. 60fps hər 16.7 ms-də bir kadr təmin edir — əksər istifadəçilər üçün görmə persistensiyası həddindən aşağı.
Profiler (Android Profiler, Xcode Instruments) istifadə edin və frame time histoqramına baxın. 90%+ kadr sıçrayışsız 16.7 ms-ə sığarsa — FPS sabitdir. 30–50 ms-ə qədər tək sıçrayışlar nəzərə çarpan tərəddüd yaradır.
Bəli, lakin bunun üçün aqressiv optimallaşdırma tələb olunur: aşağı render rezolyusiyası, sadə shaderlər, minimal draw calls sayı, şəffaflıq və mürəkkəb kölgələrdən imtina. Aşağı seqment cihazlarda test edin — onlar real performansı göstərəcək.
VSync mexanizminə görə: GPU kadrı 16.7 ms-də tamamlaya bilməzsə, VBlank-ı ötürür və cari kadrı daha 16.7 ms saxlayır. Faktiki olaraq bir kadr iki yenilənmə dövrü göstərilir və FPS dəqiq yarıya düşür.
Bəli. Hətta sadə siyahı sürüşdürmə və keçid animasiyaları rahat qavrama üçün 60fps tələb edir. İstifadəçilər swipe zamanı yavaşlamaları dərhal görür və bu, subyektiv testlərdə tətbiqin reytinqini 2–3 dəfə aşağı salır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun