Проверяет понимание асинхронного планирования задач в браузере и умение не блокировать главный поток при обработке больших объёмов работы.
JavaScript в браузере выполняется в одном главном потоке, который отвечает и за выполнение кода, и за отрисовку интерфейса. Если запустить длинный цикл на несколько секунд, страница «зависнет»: пользователь не сможет кликать, скроллить, анимации остановятся. Решение — разбить работу на небольшие порции (chunks) и между ними возвращать управление браузеру через асинхронные механизмы.
function processInChunks(items, chunkSize, onDone) {
let index = 0;
function runChunk() {
const end = Math.min(index + chunkSize, items.length);
for (; index < end; index++) {
heavyOperation(items[index]); // тяжёлая логика
}
if (index < items.length) {
setTimeout(runChunk, 0); // отдаём управление браузеру
} else {
onDone();
}
}
runChunk();
}
processInChunks(bigArray, 100, () => console.log('Готово'));
Такой приём используют при парсинге больших JSON, обработке изображений, виртуализации длинных списков, индексации данных на клиенте, а также в редакторах и IDE, работающих в браузере. В Node.js аналогичная идея реализуется через setImmediate или process.nextTick.
Итог: если задача может занять больше 50 мс, её стоит разбить на порции и выполнять асинхронно — это сохранит отзывчивость интерфейса и улучшит пользовательский опыт.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию