Skip to content

زمان‌بندی مرورگر (Browser Timings)

این صفحه محدودیت‌های فنی معماری WebGL مربوط به پارامتر Application.targetFrameRate را به تفصیل شرح می‌دهد.

هنگامی که یک پروژه Unity برای WebGL کامپایل می‌شود، پارامتر Application.targetFrameRate تنها محدودیت داخلی فریم انجین را تغییر نمی‌دهد، بلکه API پایه مرورگر را که حلقه اصلی (Main Loop) از طریق آن اجرا می‌شود نیز تغییر می‌دهد.

بدون محدودیت (Uncapped) (requestAnimationFrame)

اگر محدودیت نرخ فریم را حذف کنید (بسته به نسخه Unity، با تنظیم Application.targetFrameRate روی -1 یا 0)، کامپایلر Emscripten حلقه اصلی Unity را مستقیماً به API مرورگر یعنی window.requestAnimationFrame متصل می‌کند.

  • مزایا: این روان‌ترین، دقیق‌ترین و بومی‌ترین روش رندرینگ در وب است. مرورگر به‌طور خودکار این فراخوانی را با نرخ تازه‌سازی مانیتور بازیکن (VSync) همگام‌سازی (Sync) می‌کند.
  • تحلیل: متریک‌های cpuMainThreadFrameTime (که توسط WebAP خوانده می‌شود) منعکس‌کننده زمان واقعی هستند که CPU صرف محاسبه فیزیک و اسکریپت‌ها کرده است.

محدود شده به‌صورت مصنوعی (setTimeout)

اگر به‌طور سخت‌گیرانه یک نرخ فریم خاص را تحمیل کنید (مثلاً Application.targetFrameRate = 30)، Emscripten مجبور می‌شود requestAnimationFrame را رها کند. در عوض، از API setTimeout() یا ترکیبات پیچیده‌ای از تایمرهای داخلی برای به تأخیر انداختن مصنوعی حلقه استفاده خواهد کرد.

تحریف متریک‌های CPU (دام Emscripten)

تایمرهای مصنوعی باعث ایجاد تفاوت و خطای عظیمی در هنگام اندازه‌گیری زمان CPU می‌شوند. پردازنده ممکن است تمام محاسبات منطق بازی را در یک زمان بسیار سریعِ ۵ میلی‌ثانیه‌ای به پایان برساند و به حالت بیکاری (Idle) برود، اما کوروتین (Coroutine) WaitForEndOfFrame تا زمانی که تایمر setTimeout تمام نشود، از سر گرفته نخواهد شد.

در نتیجه: ابزار FrameTimingManager این زمان انتظار را در داخل زمان‌بندی‌های CPU ثبت خواهد کرد. Profiler (و ابزار Tracker در WebAP) نتیجه می‌گیرند که شما با یک گلوگاه پردازنده (CPU Bottleneck) مواجه هستید، حتی اگر پردازنده به‌طور عملکردی بیکار باشد و فریم‌ها صرفاً در انتظار تایمر مرورگر باشند.

استراتژی پیکربندی صحیح

برای اینکه عملکرد تطبیقی وب (Web Adaptive Performance) در مرورگر به بهترین نحو کار کند:
۱. از Application.targetFrameRate استفاده نکنید. آن را روی -1 (بدون محدودیت) بگذارید.
۲. FPS مورد نظر خود را در تنظیمات افزونه مشخص کنید (Target Min FPS = 60). WebAP از این مقدار به‌عنوان یک محدودیت سخت استفاده نمی‌کند، بلکه آن را به‌عنوان پایه‌ای برای تصمیم‌گیری در مورد کیفیت رندر در نظر می‌گیرد.