Потоки JavaScript
Где выполняется код страницы и зачем нужен Web Worker.
Поток выполняет код по очереди. Код страницы обычно работает в основном потоке браузера: здесь выполняются игровая логика и обработчики ввода.
Если в этом потоке запустить долгий расчёт, например генерацию карты, обработчики кликов будут ждать его завершения. Из-за этого игра может перестать отвечать на действия игрока.
Код страницы · по очереди
Код задачи · отдельно от страницы
generateMap()Рассчитать картуЧасть подготовки кода и работы сборщика мусора.
У V8 есть и свои фоновые задачи, например подготовка кода и часть сборки мусора. Эти задачи движок распределяет сам. Для переноса игровой функции в отдельный поток приложение должно создать Worker и запустить код там.
Что делает async
Функция с async возвращает Promise.
async function buildMap() {
return generateMap(); // Still runs on the calling JS thread
}
Здесь generateMap() выполняется в том же потоке, где вызвана buildMap(). Если расчёт долгий, поток всё это время занят. Добавление async не переносит расчёт в Worker.