Khi viết một hoạt ảnh JavaScript, bạn tất nhiên tạo một vòng lặp bằng cách sử dụng setInterval (hoặc setTimeout lặp lại). Nhưng độ trễ tốt nhất để sử dụng trong các cuộc gọi setInterval/setTimeout là gì?Cách xác định "tốc độ khung hình" tốt nhất (chậm trễ setInterval) để sử dụng trong vòng lặp hoạt ảnh JavaScript?
Trong jQuery API page for the .animate() function, người sử dụng "fbogner" nói:
Chỉ cần nếu có ai quan tâm đến: Ảnh động được "trả lại" sử dụng một setInterval với thời gian ra khỏi 13ms. Điều này khá nhanh! Khoảng thời gian nhanh nhất có thể của Chrome là khoảng 10ms. Tất cả các trình duyệt khác "mẫu" vào khoảng 20-30ms.
Bất kỳ ý tưởng nào về cách jQuery xác định sử dụng số cụ thể này?
Bắt đầu thưởng. Tôi hy vọng ai đó có kiến thức về mã nguồn đằng sau Chromium hoặc Firefox có thể cung cấp một số sự kiện khó có thể sao lưu quyết định của tốc độ khung hình cụ thể. Hoặc có lẽ một danh sách các hình ảnh động (hoặc khung công tác) và sự chậm trễ của chúng. Tôi tin rằng điều này làm cho một cơ hội thú vị để làm một chút nghiên cứu.
Thú vị - Tôi vừa dành thời gian xem mã nguồn của Google Pac-Man để xem những gì họ đã làm. Họ thiết lập một loạt các FPS có thể (90, 45, 30), bắt đầu từ đầu tiên, và sau đó mỗi khung họ kiểm tra "chậm" của khung (số khung vượt quá thời gian quy định của nó). Nếu độ chậm đi vượt quá 50ms 20 lần, tốc độ khung hình sẽ giảm xuống mức tiếp theo trong danh sách (90 -> 45, 45 -> 30). Có vẻ như tốc độ khung hình không bao giờ được nâng lên, có lẽ vì trò chơi quá ngắn ngủi nên sẽ không có vấn đề gì khi viết mã đó.
Ồ, và độ trễ setInterval tất nhiên được đặt thành 1000/tốc độ khung hình. Họ làm, trên thực tế, sử dụng setInterval và không lặp lại setTimeouts.
Tôi nghĩ tính năng tốc độ khung hình động này khá gọn gàng!
Liên kết bài đăng trên blog của 'John Resig trỏ đến địa chỉ sai –
bài đăng trên blog của John Resig có lẽ nên trỏ đến http://ejohn.org/blog/accuracy-of-javascript-time/ –
Đã sửa - cảm ơn. –