120fps — فرکانس 120 فریم در ثانیه، قابل دسترس در صفحهنمایشهای با نرخ تازهسازی 120 هرتز، که هر فریم 8.3 میلیثانیه زمان میبرد. به گفته Apple WWDC 2023 Session، ProMotion به طور خودکار فرکانس را از 24 تا 120 هرتز برای تعادل روانی و مصرف انرژی تغییر میدهد. 8.3 میلیثانیه — دو برابر کمتر از بودجه استاندارد است که نیازمند بهینهسازی جدی رندرینگ میباشد.
نکات اصلی
120fps — فرکانس فریم دو برابر نسبت به استاندارد، که در آن صفحهنمایش تصویر را 120 بار در ثانیه بهروز میکند. هر فریم بودجه زمانی 8.33 میلیثانیه دارد — نصف 60fps. این بدان معناست که GPU و CPU باید گرافیک را دو برابر سریعتر پردازش کنند و همه الگوریتمهایی که در 16.7 میلیثانیه کار میکنند، در 120fps فقط در صورت کارایی دو برابر انجام میشوند.
اولین دستگاه موبایل با صفحهنمایش 120 هرتز Razer Phone (2017) با پنل IGZO شارپ بود. اپل 120 هرتز را با نام ProMotion در آیپد پرو (2017) و در آیفون — فقط در سال 2021 در آیفون 13 پرو معرفی کرد. در اندروید 120 هرتز از سال 2020 فراگیر شد: سامسونگ گلکسی S20، وانپلاس 8 پرو، شیائومی می 10. امروزه 90–120 هرتز استاندارد برای دستگاههای پرچمدار است و فناوری LTPO امکان تغییر پویای فرکانس را فراهم میکند.
ادراک 120fps توسط کاربر با 60fps نه چندان در نبود لرزش، بلکه در حس پاسخگویی فوری تفاوت دارد — مکاننما، اسکرول، انیمیشنها با حداقل تاخیر انگشت را دنبال میکنند. این حس اغلب به عنوان صفحه «مایع» یا «روغنی» توصیف میشود. پس از استفاده از 120 هرتز، بازگشت به 60 هرتز به صورت ذهنی به عنوان کندی احساس میشود، حتی اگر افت فریم عینی وجود نداشته باشد.
صفحهنمایش 120 هرتز از نظر فیزیکی پیکسلها را 120 بار در ثانیه بهروز میکند و سیگنال را از طریق گذرگاه MIPI DSI/DPI با فرکانس دو برابر ارسال میکند. هر پیکسل هر 8.3 میلیثانیه یک مقدار روشنایی جدید دریافت میکند. برای پنلهای OLED این بدان معناست که زمان انتشار هر زیرپیکسل کاهش مییابد که نیازمند نور پسزمینه روشنتر برای حفظ همان روشنایی تصویر است.
LTPO (Low-Temperature Polycrystalline Oxide) — فناوری تولید صفحهنمایشهای OLED که LTPS (سرعت سوئیچینگ بالا) و IGZO (مصرف انرژی پایین در حالت ایستا) را ترکیب میکند. LTPO به صفحهنمایش اجازه میدهد بدون هزینه انرژی اضافی، نرخ تازهسازی را از 1 تا 120 هرتز به صورت پویا تغییر دهد. در حالت Always-On Display فرکانس به 1 هرتز کاهش مییابد، در اسکرول — به 120 هرتز افزایش مییابد. این کار تا 30% صرفهجویی انرژی در مقایسه با صفحهنمایشهایی که دائماً روی 120 هرتز کار میکنند، فراهم میکند.
Frame pacing — یکنواختی فواصل بین فریمها، مهمترین پارامتر در 120fps. اگر در 60fps اختلاف 2–3 میلیثانیه بین فریمها نامحسوس باشد، در 120fps همان اختلاف مطلق 25% از مدت زمان فریم را تشکیل میدهد و به عنوان لرزش احساس میشود. برای 120fps روان، هر فریم باید در 8.3 میلیثانیه ±1 میلیثانیه قرار گیرد. ابزارهایی مانند FrameRate در Xcode Instruments نه تنها میانگین FPS، بلکه هیستوگرام فواصل را برای ارزیابی frame pacing نشان میدهند.
// iOS — تشخیص صفحهنمایش 120 هرتز از طریق CADisplayLink
func checkDisplayRefreshRate() {
let link = CADisplayLink(target: self,
selector: #selector(step))
if let preferredRate = link?.preferredFrameRateRange {
print("حداکثر فرکانس: \(preferredRate.maximum) هرتز")
}
}
ProMotion — علامت تجاری اپل برای صفحهنمایشهای با نرخ تازهسازی تطبیقی تا 120 هرتز. اولین بار در iPad Pro 10.5 (2017) معرفی شد، سپس در iPhone 13 Pro (2021) و MacBook Pro (2021) ظاهر شد. ProMotion فقط 120 هرتز نیست — این مدیریت هوشمند فرکانس است: سیستم نوع محتوا را تحلیل کرده و فرکانس را برای تعادل بهینه عملکرد و مصرف انرژی تغییر میدهد.
ProMotion از چهار حالت پشتیبانی میکند: 24 هرتز برای محتوای ایستا و ویدیوی 24fps، 30 هرتز برای ویدیوی 30fps، 60 هرتز برای ناوبری UI و 120 هرتز برای اسکرول و بازیها. تغییر بین حالتها در یک فریم (8.3 میلیثانیه) رخ میدهد و برای کاربر نامحسوس است. توسعهدهنده میتواند از طریق preferredFrameRateRange در CADisplayLink بر انتخاب فرکانس تأثیر بگذارد، اما تصمیم نهایی را سیستم بر اساس تحلیل محتوا میگیرد.
اپل از iOS 15 API برای کار با ProMotion ارائه میدهد. CADisplayLink.preferredFrameRateRange امکان تنظیم محدوده فرکانس ترجیحی را فراهم میکند. UIScene.ActivationConditions میتواند در انتقال بین صحنهها بر فرکانس تأثیر بگذارد. برای رندرینگ Metal، CAMetalLayer.displaySyncEnabled باید برای همگامسازی با ProMotion true باشد. اگر برنامه برای 120fps بهینهسازی نشده باشد، iOS به طور خودکار آن را به 60 هرتز تغییر میدهد که در Xcode در بخش GPU Report قابل مشاهده است.
// iOS — درخواست 120fps برای حالت بازی
let displayLink = CADisplayLink(
target: self,
selector: #selector(gameLoop)
)
if #available(iOS 15.0, *) {
displayLink?.preferredFrameRateRange =
CAFrameRateRange(minimum: 80,
maximum: 120,
preferred: 120)
}
displayLink?.add(to: .current,
forMode: .default)
بهینهسازی برای 120fps — فقط دو برابر سریعتر کردن کد نیست، بلکه بازنگری معماری رندرینگ است. عملیاتی که در 16.7 میلیثانیه در 60fps جا میشدند، اکنون باید در 8.3 میلیثانیه اجرا شوند. این موضوع بر تمام مراحل خط لوله تأثیر میگذارد: آمادهسازی CPU، رندرینگ GPU و فراخوانیهای سیستمی.
در 120fps تعداد draw calls در هر فریم باید دو برابر کمتر از 60fps باشد تا بار GPU حفظ شود. اگر در 60fps 400 draw calls مجاز باشد، در 120fps — حداکثر 200. برای کاهش فراخوانیهای رندر از اطلسهای بافت، ادغام مشها و GPU-instancing استفاده کنید. در Metal از Indirect Command Buffers، در Vulkan از Secondary Command Buffers برای نوشتن موازی دستورات استفاده کنید.
Shaderها — عامل بحرانی دیگر. شیدرهای پیکسل پیچیده با نمونهبرداریهای بافتی متعدد و عملیات ریاضی میتوانند به راحتی از بودجه 8.3 میلیثانیه فراتر روند. از شیدرهای با دقت پایین (half به جای float) استفاده کنید، تعداد دستورالعملها و نمونههای بافت را کاهش دهید. در GPUهای موبایل (Apple A17، Snapdragon 8 Gen 3) هر نمونهبرداری بافت 2–4 سیکل طول میکشد و در 120fps میتواند به گلوگاه تبدیل شود.
در 120fps، main thread باید فریم را در 4–5 میلیثانیه آماده کند تا زمان برای رندرینگ GPU باقی بماند. هر عملیات همزمان در main thread — خواندن از پایگاه داده، تجزیه JSON، بارگذاری تصاویر — لرزش ایجاد میکند. تمام عملیات سنگین را به رشتههای پسزمینه منتقل کنید، از APIهای ناهمزمان و استخرهای رشتهای استفاده کنید. در iOS، DispatchQueue با qualityOfService .userInteractive باید فقط برای کد بحرانی رندرینگ رزرو شود.
| جزء | بودجه 120fps | بودجه 60fps |
|---|---|---|
| CPU (main thread) | 4 میلیثانیه | 8 میلیثانیه |
| رندرینگ GPU | 4 میلیثانیه | 8 میلیثانیه |
| ترکیب | 0.3 میلیثانیه | 0.7 میلیثانیه |
| انتظار VSync | 0–2 میلیثانیه | 0–5 میلیثانیه |
مقایسه 120fps و 60fps به دو برابر شدن روانی خلاصه نمیشود. تفاوت بسته به نوع محتوا به طور متفاوتی درک میشود. برای اسکرول و انیمیشنهای UI، 120fps به طور ذهنی رابط «پاسخگو»تری میدهد. برای بازیها، مزیت 120fps در کاهش تاری حرکت و ردیابی دقیقتر اشیاء سریع آشکار میشود.
مصرف انرژی — مهمترین سازش. 120fps 30–50% بیشتر از 60fps در همان روشنایی صفحه انرژی مصرف میکند. این بدان معناست که روی باتری 4000 میلیآمپر ساعت، یک ساعت بازی در 120fps باتری را حدود 25–30% سریعتر تخلیه میکند. صفحهنمایشهای LTPO تا حدی مشکل را حل میکنند و فرکانس را در صحنههای ایستا به 1 هرتز کاهش میدهند، اما در استفاده فعال (اسکرول، بازی) فرکانس در حداکثر باقی میماند.
انتخاب بین 60fps و 120fps به اولویتهای توسعهدهنده بستگی دارد. برای شبکههای اجتماعی، پیامرسانها و برنامههای خبری 120fps مزیت قابل توجهی ندارد — تعامل اصلی (خواندن، وارد کردن متن) از فوقروانی بهره نمیبرد. برای بازیها، نقشهها، ویرایشگرهای گرافیکی و برنامههای با انیمیشن فشرده 120fps به مزیت رقابتی و نشانگر کیفیت تبدیل میشود.
تست 120fps نیازمند رویکرد ویژه است: معیارهای استاندارد 60fps مشکلات frame pacing در 120 هرتز را نشان نمیدهند. از دوربین پرسرعت (120+ fps) برای ضبط رفتار واقعی صفحه یا ابزارهای داخلی پلتفرم — Xcode Metal Capture برای iOS و AGI (Android GPU Inspector) برای اندروید استفاده کنید. این ابزارها زمان دقیق هر فریم شامل انتظار VSync را نشان میدهند و به شناسایی میکرولرزشها کمک میکنند.
سوالات متداول
همیشه نه. 120fps دو برابر انرژی و منابع محاسباتی نیاز دارد. برای محتوای ایستا و UI ساده 60fps کافی است. مزیت 120fps در صحنههای پویا قابل توجه است: اسکرول، بازی، انیمیشنهای انتقال.
از Xcode Instruments (الگوی Core Animation) یا Android Studio Profiler استفاده کنید. در iOS، CADisplayLink.timestamp را بررسی کنید — فاصله بین فراخوانیها باید حدود 8.3 میلیثانیه باشد. در اندروید، Show refresh rate را در Developer Options فعال کنید.
صفحهنمایش پیکسلها را دو برابر بیشتر بهروز میکند، GPU دو برابر عملیات رندرینگ انجام میدهد، CPU دو برابر فریم پردازش میکند. هر عملیات انرژی مصرف میکند. صفحهنمایشهای LTPO فرکانس را در حالت ایستا کاهش میدهند، اما در استفاده فعال مصرف انرژی متناسب با فرکانس افزایش مییابد.
بله. از اندروید 11 به بعد، سیستم از نرخهای تازهسازی مختلف پشتیبانی میکند. توسعهدهنده میتواند از طریق WindowManager.setPreferredRefreshRate 120 هرتز درخواست کند. با این حال، همه دستگاهها 120fps را پایدار نگه نمیدارند — بهینهسازی رندرینگ GPU ضروری است.
در تست کور، اکثر کاربران تفاوت را در اسکرول و انیمیشنها متوجه میشوند. با این حال برای استفاده معمولی (رسانههای اجتماعی، ویدیو، پیامرسانها) تفاوت به صورت ذهنی کم است. پس از عادت به 120 هرتز، بازگشت به 60 هرتز به عنوان کندی احساس میشود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید