60fps trong phát triển di động: bản chất, nguyên lý hoạt động và tác động đến hiệu suất

Tác giả: IT Sectr Đã đăng: 2026-04-01 Thời gian đọc: 8 phút

60fps là tốc độ khung hình 60 khung hình mỗi giây, trong đó mỗi khung hình mất chính xác 16,7 ms, mang lại chuyển động mượt mà về mặt thị giác. Theo Android Game Optimization Guide, 60 FPS ổn định được coi là tiêu chuẩn tối thiểu cho hoạt ảnh thoải mái trong các ứng dụng di động. 16,7 ms là ngân sách thời gian để render một khung hình mà nhà phát triển phải đáp ứng để đạt được 60 FPS.

Những điểm chính

  • 60fps — tiêu chuẩn của hoạt ảnh mượt mà, trong đó mỗi khung hình được xử lý trong 16,7 ms
  • Ngân sách thời gian khung hình — thời gian dành cho việc render một khung hình, rất quan trọng cho FPS ổn định
  • Rớt khung hình xảy ra khi GPU không thể xử lý khung hình trong 16,7 ms được phân bổ
  • Choreographer trên Android và CADisplayLink trên iOS đồng bộ hóa việc render với tốc độ làm mới
  • Hồ sơ hóa — bước bắt buộc để xác định các nút thắt cổ chai làm giảm FPS

60fps là gì

60fps (60 khung hình mỗi giây, frames per second) là thước đo tốc độ khung hình mà màn hình làm mới hình ảnh 60 lần mỗi giây. Mắt người ngừng phân biệt các khung hình riêng lẻ ở khoảng 50–60 Hz nhờ hiệu ứng bền vững của thị giác, khiến 60fps trở thành ngưỡng tự nhiên của sự mượt mà đối với hầu hết người dùng.

Mỗi khung hình ở 60fps có ngân sách thời gian cố định là 16,67 ms. Ngân sách này bao gồm mọi thứ: từ xử lý đầu vào của người dùng đến render và xuất ra màn hình. Nếu bất kỳ thao tác nào — vật lý, hoạt ảnh, render cảnh phức tạp — vượt quá giới hạn này, tốc độ khung hình sẽ giảm xuống 30fps hoặc thấp hơn, được cảm nhận trực quan như hiện tượng giật lag.

Trong phát triển di động, 60fps từ lâu đã là giới hạn do những ràng buộc về phần cứng: hầu hết màn hình trước năm 2017 hoạt động ở 60 Hz. Với sự ra đời của màn hình 90 Hz và 120 Hz, 60fps đã trở thành tiêu chuẩn dưới thay vì mục tiêu trên. Tuy nhiên, đối với các ứng dụng UI, video và hầu hết trò chơi thông thường, 60fps vẫn là chỉ số mục tiêu về hiệu suất.

Tại sao lại là 60 khung hình mỗi giây

60 Hz là tần số dòng điện xoay chiều trong lưới điện của Mỹ và Nhật Bản, lịch sử đã xác định tốc độ làm mới của các tiêu chuẩn truyền hình NTSC đầu tiên. Tiêu chuẩn PAL sử dụng 50 Hz do lưới điện châu Âu 50 Hz. Sự quán tính lịch sử này đã truyền sang màn hình máy tính và sau đó là màn hình di động.

Sinh lý thị giác và sự bền vững

Hiệu ứng bền vững là một đặc tính của thị giác con người giữ lại hình ảnh trên võng mạc trong khoảng 30–50 ms sau khi kích thích biến mất. Ở 60fps, một khung hình mới đến mỗi 16,7 ms — trước khi dấu vết bền vững của khung hình trước biến mất, tạo ra ảo giác về chuyển động liên tục. Nghiên cứu của Đại học Cardiff (2023) cho thấy phi công tiêm kích có thể phân biệt một khung hình riêng lẻ ở 220 Hz, nhưng đối với người dùng thông thường, sự khác biệt giữa 60 và 120 Hz ít rõ rệt hơn nhiều so với giữa 30 và 60 Hz.

Tiêu chuẩn ngành

Apple đã thiết lập 60fps làm tiêu chuẩn cho iOS vào năm 2007 với chiếc iPhone đầu tiên và duy trì nó cho đến iPhone 13 Pro (2021). Android về mặt lịch sử cũng tuân theo cùng một tiêu chuẩn, mặc dù các thiết bị đầu tiên có 90 Hz (OnePlus 7 Pro, 2019) và 120 Hz (Razer Phone, 2017) xuất hiện sớm hơn. Ngày nay, 60fps là ngưỡng tối thiểu để vượt qua bài đánh giá trên App Store và Google Play cho các ứng dụng có hoạt ảnh, mặc dù các yêu cầu chính thức không được ghi lại.

Cách đo và kiểm soát FPS

Đo FPS là bước đầu tiên của tối ưu hóa. Nếu không có các chỉ số khách quan, không thể xác định được hiệu suất bị mất ở đâu. Các nền tảng di động cung cấp các công cụ hồ sơ hóa tích hợp và API phần mềm để đo tốc độ khung hình theo thời gian thực.

Công cụ hồ sơ hóa

Android Studio ProfilerXcode Instruments là những công cụ chính để phân tích FPS. Android Profiler hiển thị thời gian render GPU, tốc độ khung hình và Jank (số khung hình bị bỏ qua). Xcode Instruments bao gồm mẫu Core Animation, hiển thị tốc độ khung hình, thời gian render và số lượng draw call. Đối với các công cụ trò chơi, Unity Profiler và Unreal Insights cung cấp phân tích chi tiết thời gian theo mô-đun.

kotlin
// Android — đo FPS qua 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())
)

Giới hạn FPS theo chương trình

CADisplayLink trên iOS và Choreographer trên Android là các cơ chế hệ thống đồng bộ hóa việc render với tốc độ làm mới màn hình. CADisplayLink gọi một phương thức với mỗi khung hình mới, truyền timestamp để tính độ trễ. Choreographer trên Android cũng làm tương tự nhưng hỗ trợ callback cho các giai đoạn khung hình khác nhau: đầu vào, hoạt ảnh, duyệt, render. Nhà phát triển có thể đăng ký Choreographer.FrameCallback và đo thời gian giữa các khung hình.

Tối ưu hóa cho 60fps ổn định

60fps ổn định có nghĩa là không có khung hình nào vượt quá ngân sách 16,7 ms. Chỉ một khung hình dài mỗi giây cũng tạo ra hiện tượng giật lag đáng chú ý. Tối ưu hóa được chia thành ba cấp độ: CPU, GPU và bộ nhớ. Mỗi cấp độ đều có thể trở thành nút thắt cổ chai.

Tối ưu hóa CPU: Layout và Measure

Layout pass là một trong những yếu tố tiêu thụ thời gian CPU chính trên Android và iOS. Hệ thống phân cấp View phức tạp, ConstraintLayout lồng nhau và drawable nặng tạo ra chuỗi measure và layout dài. Đối với các ứng dụng UI, hãy sử dụng hệ thống phân cấp View phẳng (độ sâu không quá 3–4 cấp), thay thế RecyclerView lồng nhau bằng ConcatAdapter và đối với danh sách trên iOS — sử dụng compositional layout với prefetching.

Thao tácThời gian điển hìnhTác động khi vượt quá
Layout1–3 msGiật lag trên màn hình phức tạp
Draw2–8 msVẽ lại, rớt khung hình
GPU Render3–10 msFPS giảm một nửa
GC (thu gom rác)2–50 msVi giật lag có thể nhìn thấy

Tối ưu hóa GPU: Overdraw và Draw Calls

Overdraw là việc render lặp lại cùng một pixel. Mỗi lớp View, nền, hình ảnh bên dưới phần tử trong suốt đều làm tăng số lượng thao tác pixel. Trên Android, hãy sử dụng Debug GPU Overdraw trong Tùy chọn nhà phát triển; trên iOS — Xcode Debug View Hierarchy. Giảm overdraw bằng cách loại bỏ các nền không cần thiết và sử dụng cờ opaque: trên Android — @drawable với android:opaque, trên iOS — isOpaque = true cho UIKit.View.

Draw calls là số lượng lệnh render được gửi đến GPU. GPU di động hiện đại xử lý 200–400 draw call mỗi khung hình ở 60fps. Vượt quá con số này gây ra sụt giảm hiệu suất. Kết hợp sprite thành atlas kết cấu, sử dụng batching và tránh render riêng lẻ từng phần tử qua một draw call riêng biệt.

Bộ nhớ và thu gom rác

Đóng băng GC là một trong những nguyên nhân chính gây ra FPS không ổn định trong các ứng dụng JVM và Kotlin. Thu gom rác trên Android có thể mất tới 30–50 ms, khiến 2–3 khung hình liên tiếp bị bỏ qua. Tránh cấp phát trong vòng lặp hoạt ảnh, sử dụng nhóm đối tượng và cấp phát trước bộ nhớ. Trên iOS, vấn đề ít nghiêm trọng hơn nhờ ARC, nhưng chu kỳ giữ tham chiếu và tràn autorelease pool cũng tạo ra vi giật lag.

Đối với trò chơi, 60fps không chỉ là tiêu chuẩn mà còn là lợi thế cạnh tranh. Nghiên cứu của Newzoo (2024) cho thấy các trò chơi có FPS không ổn định dưới 60 nhận được nhiều đánh giá tiêu cực hơn 40% trên Google Play. Unity và Unreal Engine cung cấp các trình hồ sơ hóa tích hợp để giám sát thời gian render: trong Unity là Frame Debugger, trong Unreal — GPU Visualizer, hiển thị thời gian chính xác của mỗi draw call và shader. 60fps ổn định đặc biệt quan trọng đối với trò chơi hành động, nơi mỗi khung hình bị rớt có thể khiến người dùng không hoàn thành được màn chơi.

Vượt qua 60fps và tần số cao

Màn hình 90 Hz và 120 Hz đang thay đổi tiêu chuẩn hiệu suất mục tiêu. Đối với các ứng dụng chạy trên thiết bị ProMotion, FPS mục tiêu có thể là 120 và ngân sách khung hình giảm xuống còn 8,3 ms. Điều này đòi hỏi mã hiệu quả gấp đôi, đặc biệt là trong draw call và render GPU.

Lợi thế của tần số cao không chỉ ở sự mượt mà: 120fps giảm độ trễ đầu vào đáng chú ý từ 8–10 ms, rất quan trọng đối với trò chơi và ứng dụng tương tác. Tuy nhiên, sự khác biệt giữa 60 và 120fps đòi hỏi cách tiếp cận cá nhân: đối với các ứng dụng UI (cuộn, hoạt ảnh), 90fps có thể là sự cân bằng tối ưu giữa độ mượt và mức tiêu thụ năng lượng, vì render 120 khung hình mỗi giây tiêu thụ nhiều năng lượng hơn 30–40% so với 60.

Apple cung cấp API để chọn tốc độ khung hình ưa thích: preferredFramesPerSecond trong CADisplayLink. Android trước API 30 không cho phép kiểm soát trực tiếp tần số làm mới, nhưng bắt đầu từ Android 12, nhà phát triển có thể thiết lập RefreshRate thông qua WindowManager, yêu cầu 60, 90 hoặc 120 Hz tùy thuộc vào loại nội dung.

Các câu hỏi thường gặp

Tại sao 60fps được coi là tiêu chuẩn tối thiểu thay vì 30?

30fps được cảm nhận như giật cục khi cuộn và hoạt ảnh vì mỗi khung hình kéo dài 33,3 ms và mắt có thể nhận thấy sự rời rạc. 60fps cung cấp một khung hình mỗi 16,7 ms — dưới ngưỡng bền vững thị giác của hầu hết người dùng.

Làm thế nào để biết ứng dụng đang cung cấp 60fps ổn định?

Sử dụng trình hồ sơ hóa (Android Profiler, Xcode Instruments) và xem biểu đồ thời gian khung hình. Nếu 90%+ khung hình nằm trong 16,7 ms mà không có đột biến — FPS ổn định. Các đột biến riêng lẻ lên đến 30–50 ms tạo ra hiện tượng giật lag đáng chú ý.

Có thể đạt được 60fps trên các thiết bị giá rẻ không?

, nhưng cần tối ưu hóa mạnh mẽ: độ phân giải render thấp, shader đơn giản, số lượng draw call tối thiểu, tránh độ trong suốt và bóng phức tạp. Hãy thử nghiệm trên các thiết bị cấp thấp — chúng sẽ cho thấy hiệu suất thực tế.

Tại sao FPS giảm một nửa (60 → 30) thay vì giảm dần?

Do cơ chế VSync: nếu GPU không thể hoàn thành một khung hình trong 16,7 ms, nó sẽ bỏ lỡ VBlank và giữ khung hình hiện tại thêm 16,7 ms nữa. Thực tế, một khung hình được hiển thị trong hai chu kỳ làm mới và FPS giảm đúng một nửa.

Có nên theo đuổi 60fps trong một ứng dụng UI đơn giản không?

. Ngay cả cuộn danh sách đơn giản và hoạt ảnh chuyển tiếp cũng cần 60fps để có trải nghiệm thoải mái. Người dùng nhận thấy ngay hiện tượng chậm khi vuốt và điều này làm giảm đánh giá ứng dụng xuống 2–3 lần trong các thử nghiệm chủ quan.

Tổng kết

  • 60fps — tiêu chuẩn của hoạt ảnh mượt mà với ngân sách khung hình 16,7 ms
  • Ngân sách thời gian khung hình bao gồm các thao tác CPU, GPU và hệ thống
  • Rớt khung hình xảy ra khi vượt quá ngân sách và được cảm nhận như giật lag
  • Hồ sơ hóa — bước bắt buộc để xác định nút thắt cổ chai
  • Overdrawdraw calls là những yếu tố tiêu thụ thời gian GPU chính
  • Đóng băng GC trên Android tạo ra FPS không ổn định do cấp phát
  • Trên màn hình 120 Hz, ngân sách khung hình giảm xuống còn 8,3 ms, đòi hỏi mã hiệu quả gấp đôi

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm