Код Senior Реализация с нуля обновлено

Очередь фоновых задач

Условие

createIdleQueue(schedule): add(fn, priority) - задачи выполняются по убыванию приоритета, порциями, через переданную функцию планирования schedule(cb). При равном приоритете - в порядке добавления. flush() выполняет всё немедленно.

Что проверяют тесты

  • выполняет по приоритету

  • равный приоритет - порядок добавления

  • по одной задаче за отрезок

  • flush выполняет всё сразу

  • одно планирование на пачку добавлений

Как подойти

Так откладывают неважную работу: отправку аналитики, предзагрузку, подсчёт производных данных. Две детали отличают рабочую очередь от игрушечной: флаг planned не даёт запросить десять отрезков на десять добавлений, и за отрезок выполняется одна задача - иначе длинная пачка заблокирует кадр, ради чего всё и затевалось. В браузере schedule - это requestIdleCallback с фолбэком на setTimeout.

Подсказки: 3
  1. Планирование должно быть однократным: несколько добавлений подряд - один запрос отрезка.
  2. За один отрезок выполняй одну задачу, иначе смысл дробления теряется.
  3. Стабильность при равном приоритете даётся порядковым номером, а не опорой на стабильность сортировки объектов.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.