Проверяет понимание работы основного потока и влияния долгих вычислений на интерфейс.
Да, блокирует. Promise не делает код асинхронным сам по себе — он лишь откладывает его выполнение. Если внутри промиса есть сложные вычисления (например, цикл), они будут выполняться в основном потоке и заморозят интерфейс.
Промисы — это не многопоточность, а способ организовать асинхронный код. Например:
new Promise((resolve) => {
for (let i = 0; i < 1e9; i++) {} // Долгий расчет
resolve("Done");
}).then(console.log);Этот код заблокирует страницу, пока цикл не завершится.
Web Workers — вынос вычислений в отдельный поток.
Разбиение на части (chunking) с помощью setTimeout или requestIdleCallback.
Оптимизация алгоритмов (например, кеширование).
Пример с Web Worker:
// main.js
const worker = new Worker("worker.js");
worker.postMessage(1e9); // Отправляем данные воркеру
worker.onmessage = (e) => console.log(e.data); // Получаем результат
// worker.js
onmessage = (e) => {
let sum = 0;
for (let i = 0; i < e.data; i++) sum += i;
postMessage(sum); // Отправляем результат обратно
};Так вычисления не помешают работе интерфейса.