Планирование: метод isInputPending()
Экспериментальная функция: Это экспериментальная технология
Перед использованием в производстве тщательно изучите таблицу совместимости с браузерами.
Метод isInputPending() интерфейса Scheduling позволяет проверить, есть ли ожидающие события ввода в очереди событий, указывающие на то, что пользователь пытается взаимодействовать со страницей.
Эта функция может быть полезной в ситуациях, когда у вас есть очередь задач, которые нужно выполнить, и вы хотите регулярно уступать управление главному потоку, чтобы позволить происходить взаимодействию пользователя, чтобы приложение оставалось отзывчивым и эффективным. isInputPending() позволяет уступать управление только тогда, когда есть ожидающие события ввода, а не делать это с произвольными интервалами.
Предупреждение: Метод isInputPending() был заменён функциями, доступными в интерфейсе Scheduler, такими как yield(), которые лучше разработаны для решения задач планирования. Подробнее см. Не используйте isInputPending().
isInputPending() вызывается с помощью navigator.scheduling.isInputPending().
Синтаксис
isInputPending() isInputPending(options)
Параметры
optionsНеобязательный-
Объект, предоставляющий параметры. В настоящее время единственный параметр:
includeContinuousНеобязательный-
Булево значение, которое
falseпо умолчанию. Если установлено вtrue, это указывает на то, что при проверке наличия ожидающего ввода следует учитывать непрерывные события. Непрерывные события — это доверенные события (события, отправленные браузером), которые последовательно срабатывают, например,mousemove,wheel,touchmove,drag,pointermoveиpointerrawupdate.
Возвращаемое значение
Булево значение, указывающее, есть ли ожидающие события ввода в очереди событий (true) или нет (false).
Примеры
Мы можем использовать isInputPending() внутри структуры обработчика задач для выполнения функции yield() только тогда, когда пользователь пытается взаимодействовать со страницей:
function yield() {
return new Promise((resolve) => {
setTimeout(resolve, 0);
});
}
async function main() {
// Create an array of functions to run
const tasks = [a, b, c, d, e];
while (tasks.length > 0) {
// Yield to a pending user input
if (navigator.scheduling.isInputPending()) {
await yield();
} else {
// Shift the first task off the tasks array
const task = tasks.shift();
// Run the task
task();
}
}
}
Это позволяет избежать блокировки главного потока, когда пользователь активно взаимодействует со страницей, потенциально обеспечивая более плавный пользовательский опыт. Однако, уступая управление только при необходимости, мы можем продолжать выполнение текущей задачи, когда нет событий пользовательского ввода для обработки. Это также предотвращает размещение задач в конце очереди после других неважных, инициированных браузером задач, которые были запланированы после текущей.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
isInputPending |
87 | 87 | Нет | 73 | Нет | 87 | Нет | 62 | Нет | 14.0 | 87 |
См. также
-
Schedulerинтерфейс - API планирования задач с приоритетами
- Быстрее события ввода с первым вкладом Facebook в браузер API на engineering.fb.com (2019)
- Лучшее планирование JS с isInputPending() на developer.chrome.com (2020)
- Оптимизация длительных задач на web.dev (2022)
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Scheduling/isInputPending