CloudDevOpsNext.js

Как исправить ошибку «Ошибка 1102: превышение лимита времени ЦП при запуске скрипта» на Cloudflare Workers с Next.js

·MAGMA

Почему возникает ошибка 1102?

При развертывании приложения Next.js через OpenNext на платформе Cloudflare Workers вы можете столкнуться с ошибкой Error 1102: Script startup exceeded CPU time limit. Это происходит не из-за ошибки в логике вашего приложения, а скорее из-за особенностей работы среды выполнения Cloudflare Workers.

Cloudflare Workers использует изолированные окружения V8 для запуска кода. При каждом новом старте («холодный старт») у вас есть ограниченный бюджет процессора для завершения начальной загрузки и подготовки обработчика запросов. Если слишком много операций выполняется на верхнем уровне модуля (глобальная область видимости), это может привести к превышению выделенного бюджета ЦП до того, как ваш обработчик запроса сможет начать работу.

Типичные примеры таких операций включают:

// Этот код выполняется при каждом холодном старте,
// прежде чем будет обработан хотя бы один запрос
const db = drizzle(env.DB);

Если подобных инициализаций становится слишком много, лимит времени ЦП исчерпывается еще до начала обработки первого запроса, что приводит к появлению ошибки 1102.

Как решить проблему

Решение заключается в переносе ресурсоемких операций из глобальной области видимости внутрь обработчика запросов или использовании ленивой инициализации. Например, вместо немедленной инициализации базы данных можно использовать отложенную загрузку:

let db;
function getDB() {
    if (!db) {
        db = drizzle(env.DB);
    }
    return db;
}

Таким образом, база данных будет создана только тогда, когда она действительно понадобится вашему приложению, а не при каждом холодном старте.

Этот подход позволяет значительно снизить время старта и избежать ошибок типа 1102.

← Вернуться к блогу
Исправляем ошибку 1102 на Cloudflare Workers с Next.js — MAGMA