Bảng đổi nhanh 1ms ↔ FPS | Tra 60 / 120 / 144 từ mili giây (cheat sheet)
Bookmark bảng này khi Profiler / ticket chỉ ghi mili giây. Công thức: FPS = 1000 ÷ ms, ms = 1000 ÷ FPS. Ba cặp phải nhớ: 60 ↔ 16.67ms, 120 ↔ 8.33ms, 30 ↔ 33.33ms. Cần đổi số lẻ (11.2ms, 22ms…) → mở máy tính FPS. Muốn hiểu ngân sách Unity / hitch → đọc 1 frame bao nhiêu ms?.
Khi QA gửi “Update ~12ms, thỉnh thoảng 20ms” hoặc Discord hỏi “1ms là bao nhiêu FPS?”, bạn không cần mở Excel. Bài máy tính 30fps to ms hướng dẫn workflow đổi số; bài ngân sách 1 frame giải thích tại sao vượt budget gây hitch. Bài này chỉ làm một việc: bảng tra cứu nhanh 1ms ↔ FPS để pin tab hoặc in A4 cạnh màn hình.
Ai nên giữ bài này
- Học Unity / Godot / web game lần đầu đọc Profiler
- Frontend tune
requestAnimationFrame/ CSS motion nặng - Freelance nhận brief “giữ 60FPS trên mid-range” từ studio outsourcing VN
- Ai đã biết công thức nhưng hay quên số lẻ lúc họp
Công thức hai chiều (nhớ 10 giây)
ms/frame = 1000 ÷ FPS
FPS = 1000 ÷ ms
giây = số_frame ÷ FPS
số_frame = giây × FPS
Ví dụ nhanh:
| Bạn thấy | Phép tính | Kết luận |
|---|---|---|
| Target 60 | 1000 ÷ 60 | Budget 16.67ms |
| Target 120 | 1000 ÷ 120 | Budget 8.33ms |
| Đo được 1ms | 1000 ÷ 1 | ~1000FPS lý thuyết (chỉ là headroom, không phải target) |
| Đo được 20ms | 1000 ÷ 20 | Trần ~50FPS nếu mọi frame = 20ms |
Lưu ý: FPS lý thuyết từ một spike ms không bằng FPS trung bình của game. Bảng dùng để ước lượng và so với budget ship.
Bảng A — FPS mục tiêu → ms (tra xuôi)
| FPS | ms/frame | Ghi nhớ nhanh |
|---|---|---|
| 24 | 41.67 | Nhịp phim — ít dùng làm target game |
| 30 | 33.33 | Mobile tiết kiệm pin / fallback |
| 48 | 20.83 | Đôi khi cinema + interactive |
| 60 | 16.67 | Chuẩn PC / web / nhiều mobile |
| 72 | 13.89 | Một số headset / panel |
| 90 | 11.11 | VR phổ biến |
| 120 | 8.33 | ProMotion / competitive |
| 144 | 6.94 | Màn gaming 144Hz |
| 165 | 6.06 | Panel cao tần |
| 240 | 4.17 | Esports — ngân sách cực chặt |
Ba số dùng hàng ngày ở lab VN: 33.33 / 16.67 / 8.33. Ghi chúng lên sticky note trước khi học VSync và deltaTime.
Bảng B — ms đo được → FPS (tra ngược, góc 1ms)
Đây là phần bổ sung hai bài kia: khi log chỉ có mili giây.
| ms/frame | FPS = 1000÷ms | Đọc nhanh so với 60/120 |
|---|---|---|
| 1 | 1000 | Rất nhẹ — còn gần hết budget 60/120 |
| 2 | 500 | Vẫn headroom lớn ở 60 |
| 4 | 250 | ~24% budget 60; ~48% budget 120 |
| 5 | 200 | ~30% của 16.67ms |
| 6.94 | 144 | Khớp màn 144Hz |
| 8 | 125 | Sát budget 120 (8.33) |
| 8.33 | 120 | Đúng target 120FPS |
| 10 | 100 | Ổn với 60; vượt 90/120 |
| 11.11 | 90 | Target VR 90 |
| 12 | ~83 | Còn ~4.7ms headroom ở 60 |
| 14 | ~71 | Sát 60 — ít room cho spike |
| 16.67 | 60 | Đúng target 60FPS |
| 20 | 50 | Drop dưới 60 nếu ổn định 20ms |
| 22 | ~45 | Hitch rõ trên title 60FPS |
| 33.33 | 30 | Đúng target 30FPS |
| 41.67 | 24 | Dưới 30 — cảm giác chậm |
Cách dùng trong họp: “Spike 22ms” → nhìn bảng → “~45FPS nếu kéo dài” → so với target 60 → ticket hợp lệ. Không cần tranh luận “22ms có tệ không?” nếu chưa biết budget.
Số lẻ (7.2, 13.5, 18.1) → Tính FPS & Frame Time, nhập ô frame time, đọc FPS cần thiết ngay. Tool chạy trên trình duyệt, không đăng ký — phù hợp máy lab trường / quán net chỉ có Chrome.
Bảng C — % ngân sách ở 60 và 120
Khi chia budget giữa AI / UI / render, % hữu ích hơn số tuyệt đối.
| Công việc (ms) | % của 16.67 (60FPS) | % của 8.33 (120FPS) |
|---|---|---|
| 1 | ~6% | ~12% |
| 2 | ~12% | ~24% |
| 4 | ~24% | ~48% |
| 5 | ~30% | ~60% |
| 8 | ~48% | ~96% (gần hết khung 120) |
| 10 | ~60% | vượt |
| 16 | ~96% | vượt nặng |
Quy tắc thực dụng: đừng thiết kế sát 100% khung. Spike GC, I/O, hoặc layout UI một frame là đủ để vượt — đặc biệt khi test trên điện thoại Android tầm trung phổ biến ở playtest VN.
Bảng D — frame ↔ giây (hay hỏi kèm)
| Câu hỏi | Công thức | Ví dụ |
|---|---|---|
| Bao nhiêu giây? | frame ÷ FPS | 90 frame @ 60 = 1.5s |
| Bao nhiêu frame? | giây × FPS | 0.25s @ 120 = 30 frame |
| Hit-stop 3 frame @ 60 | 3 ÷ 60 | 0.05s |
| Fade 200ms @ 60 | 0.2 × 60 | 12 frame |
Timeline Unity / After Effects / CSS hay trộn đơn vị. Ghi rõ FPS giả định khi chuyển — 12 frame @ 30 ≠ 12 frame @ 60.
Case 1: Ticket chỉ ghi “1ms”
Bối cảnh: Dev mới optimize một hàm, PR note: “giảm từ 4ms xuống 1ms”. Producer hỏi có ship 120 được không.
Đọc bảng:
- 1ms @ target 60 ≈ 6% budget — tốt, nhưng một hàm không đại diện cả frame.
- 1ms @ target 120 ≈ 12% — vẫn ổn nếu các hệ khác không vượt.
- Cần Profiler full frame trên máy mục tiêu, không chỉ micro-benchmark empty scene.
Kết luận cho junior: cải thiện 1ms đáng khen, nhưng ship FPS phụ thuộc tổng ms/frame + refresh panel, không phụ thuộc một số trong PR.
Case 2: QA báo 12ms ổn định, thỉnh thoảng 20ms
Indie 2D, target 60 trên máy mid-range.
| Đo | So budget 16.67 | Ý nghĩa |
|---|---|---|
| 12ms ổn định | Còn ~4.7ms | Đạt 60 với headroom vừa |
| Spike 20ms | Vượt → ~50FPS khung đó | Người chơi thấy giật ngắn |
Việc làm: tìm nguyên nhân spike (spawn, GC, UI rebuild), không hạ target xuống 30 trừ khi product chấp nhận. Tra ngược nhanh bằng bảng B hoặc máy tính FPS.
Phân biệt với hai bài liên quan (tránh đọc nhầm)
| Bài | Góc chính | Mở khi nào |
|---|---|---|
| Bài này (1ms ↔ FPS) | Bảng tra cứu ms↔FPS, % budget | Có số ms / cần cheat sheet |
| [FPS calculator / 30fps to ms](/vi/blog/fps-calculator-30fps-to-ms/) | Workflow đổi số trên tool | Cần nhập số tùy ý, preset Hz |
| [1 frame bao nhiêu ms?](/vi/blog/1-frame-ms-60fps-120fps/) | Ngân sách, Unity, VSync, hitch | Hiểu *vì sao* và checklist ship |
Cả ba đều trỏ cùng tool: /vi/tools/fps-calculator/. Không cần cài app.
Checklist 15 giây trước khi trả lời ticket
- Biết target ship (30 / 60 / 90 / 120) — chưa biết thì hỏi lại
- Đổi ms → FPS lý thuyết bằng bảng B hoặc tool
- So với budget: 33.33 / 16.67 / 8.33
- Phân biệt một hệ thống vs cả frame
- Spike đơn lẻ ≠ FPS trung bình session
- Panel 60Hz không “hiện” thêm frame dù engine báo 200FPS
Câu hỏi thường gặp
1ms có phải lúc nào cũng tốt?
Trong micro-benchmark: có. Trong full frame: chỉ tốt nếu tổng các hệ vẫn dưới budget. 1ms AI + 14ms UI vẫn có thể drop ở 60.
Tại sao 1000 ÷ 60 ra 16.666… chứ không tròn?
Vì 1000 không chia hết cho 60. Design dùng 16.67ms; sync audio sample rate (44100) là bài khác — đừng giả định frame math = DSP.
Màn 60Hz mà game 120FPS nội bộ thì sao?
Mắt trên panel 60Hz không thấy 120 frame riêng biệt. Vẫn hữu ích giảm input latency trong một số stack, nhưng đừng bán “120Hz visual” trên panel 60.
CSS transition: 300ms đổi sang frame thế nào?
Ở 60FPS: 0.3 × 60 = 18 frame. Ở 120: 36 frame. Cùng 300ms, số frame khác nhau theo refresh.
Liên kết liên quan
- Máy tính FPS & Frame Time — đổi số lẻ ngay trên trình duyệt
- FPS Calculator|30fps to ms — workflow + WaitForSeconds
- 1 frame bao nhiêu ms? 60 / 120 — ngân sách Unity & profiler
- Danh sách công cụ