Spec-Zone.ru › Web APIs

Планирование: метод 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();
    }
  }
}

Это позволяет избежать блокировки главного потока, когда пользователь активно взаимодействует со страницей, потенциально обеспечивая более плавный пользовательский опыт. Однако, уступая управление только при необходимости, мы можем продолжать выполнение текущей задачи, когда нет событий пользовательского ввода для обработки. Это также предотвращает размещение задач в конце очереди после других неважных, инициированных браузером задач, которые были запланированы после текущей.

Спецификации

Спецификация
Раннее определение событий ввода
# dom-scheduling-isinputpending

Совместимость с браузерами

Рабочие столы Мобильные устройства
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API