زمان‌بندی تکالیف براساس اولویت

ویژگی‌های وب: Scheduler API

هنگام ساختن برنامه‌های وب پیچیده، تکالیف سطوح مختلفی از فوریت دارند. تکمیل کردن تکالیف مربوط به نمای فعلی مهم‌تر از ارسال تجزیه‌وتحلیل یا واکشی پیشاپیش دارایی‌ها است. ‫Prioritized Task Scheduling API به شما امکان می‌دهد کارها را با اولویت‌های خاص زمان‌بندی کنید و مطمئن شوید که مرورگر به ورودی کاربر پاسخ می‌دهد.

زمان‌بندی تکالیف براساس اولویت

از scheduler.postTask() برای زمان‌بندی تکالیف با یکی از سه اولویت زیر استفاده کنید:

  • user-blocking: تکالیفی که تعامل کاربر را مسدود می‌کنند (برای مثال، مدیریت ورودی، پردازشی بحرانی).
  • ‫user-visible: تکالیف برای کاربر قابل‌مشاهده است اما مسدود نمی‌کند (پیش‌فرض).
  • ‫background: تکالیفی که زمان‌بندی بحرانی ندارند (مثلاً تجزیه‌وتحلیل، واکشی پیشاپیش).
// Schedule a high-priority task that blocks user interaction
scheduler.postTask(() => {
  // DO: Handle critical updates that impact user interaction
  handleCriticalUpdate();
}, { priority: 'user-blocking' });

// Schedule a default priority task
scheduler.postTask(() => {
  // DO: Render non-critical content that is visible to the user
  renderSecondaryContent();
}); // Defaults to 'user-visible'

// Schedule a low-priority background task
scheduler.postTask(() => {
  // DO: Perform heavy background work that is not time-critical
  sendAnalytics();
}, { priority: 'background' });

راهبردهای جایگزین

برای پشتیبانی از مرورگرهایی که Prioritized Task Scheduling API ندارند، باید از شبیه‌ساز مرورگر برای حفظ اولویت‌بندی تکلیف استفاده کنید.

// Feature detect the scheduler API
if (!('scheduler' in window && 'postTask' in window.scheduler)) {
  // DO: Conditionally load the polyfill for browsers that need it
  const script = document.createElement('script');
  script.src = 'https://unpkg.com/scheduler-polyfill';
  script.onload = () => {
    // Polyfill is loaded and ready to use
    runScheduledTasks();
  };
  document.head.appendChild(script);
} else {
  runScheduledTasks();
}

function runScheduledTasks() {
  // Now safe to use scheduler.postTask in all browsers
  scheduler.postTask(() => {
    console.log('Task with priority support');
  }, { priority: 'background' });
}