Почему возникает ошибка 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.