Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: optimization

Блокирует ли тяжелый код в Promise рендер страницы?

Проверяет понимание работы основного потока и влияния долгих вычислений на интерфейс.

Короткий ответ

Да, блокирует. 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); // Отправляем результат обратно
};

Так вычисления не помешают работе интерфейса.

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#optimization

Подпишись на React Developer в телеграм