Очередь фоновых задач
Условие
createIdleQueue(schedule): add(fn, priority) - задачи выполняются по убыванию приоритета, порциями, через переданную функцию планирования schedule(cb). При равном приоритете - в порядке добавления. flush() выполняет всё немедленно.
Что проверяют тесты
выполняет по приоритету
равный приоритет - порядок добавления
по одной задаче за отрезок
flush выполняет всё сразу
одно планирование на пачку добавлений
Как подойти
Так откладывают неважную работу: отправку аналитики, предзагрузку, подсчёт производных данных. Две детали отличают рабочую очередь от игрушечной: флаг planned не даёт запросить десять отрезков на десять добавлений, и за отрезок выполняется одна задача - иначе длинная пачка заблокирует кадр, ради чего всё и затевалось. В браузере schedule - это requestIdleCallback с фолбэком на setTimeout.
Подсказки: 3
- Планирование должно быть однократным: несколько добавлений подряд - один запрос отрезка.
- За один отрезок выполняй одну задачу, иначе смысл дробления теряется.
- Стабильность при равном приоритете даётся порядковым номером, а не опорой на стабильность сортировки объектов.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.