هنگام ساختن برنامههای وب پیچیده، تکالیف سطوح مختلفی از فوریت دارند. تکمیل کردن تکالیف مربوط به نمای فعلی مهمتر از ارسال تجزیهوتحلیل یا واکشی پیشاپیش داراییها است. 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' });
}