Edge Runtime в современных JavaScript-платформах (Vercel Edge Functions, Cloudflare Workers, Deno Deploy) представляет собой облегчённую среду исполнения, построенную вокруг Web API-стандарта, а не Node.js. Это принципиально меняет доступный инструментарий и напрямую влияет на совместимость библиотек, включая решения для сессий и шифрования, такие как Iron-based подходы.
Ключевая идея Edge Runtime — минимальная задержка и глобальное распределение исполнения. Однако за это приходится платить ограничениями окружения.
В Edge Runtime недоступны привычные модули:
fs (работа с файловой системой)net, tls (низкоуровневые сетевые
соединения)child_processЭто означает, что любые зависимости, опирающиеся на файловую систему или нативные биндинги, автоматически становятся несовместимыми.
Одно из ключевых отличий — криптография.
В Node.js используется:
crypto (Node API)В Edge Runtime используется:
Web Crypto API (crypto.subtle)Это важно для библиотек вроде iron-session, которые
используют шифрование для защиты данных в cookie.
Разница проявляется в:
Promise вместо синхронных
вызовов)Edge Runtime работает в первую очередь с:
Uint8ArrayArrayBufferstring (UTF-8)Node.js-специфичный Buffer может отсутствовать или быть
частично эмулирован, что создаёт несовместимости при работе с
криптографией и сериализацией.
Библиотеки семейства Iron (например, iron-session)
используются для безопасного хранения данных в cookie через:
В Node.js это реализуется через crypto и синхронные
операции, но в Edge среде возникают ограничения.
Если библиотека использует:
crypto.createHmaccrypto.randomBytescrypto.createCipherто в Edge Runtime это не будет работать напрямую.
Вместо этого требуется:
crypto.subtle.signcrypto.subtle.encryptcrypto.getRandomValuesNode.js допускает синхронные криптооперации, что упрощает API.
Edge Runtime требует:
await на каждом этапе криптографииЭто влияет на архитектуру session-менеджмента: логика становится цепочкой промисов, а не последовательным кодом.
Edge Runtime часто используется в связке с CDN и прокси, где действуют ограничения:
Это критично для Iron-сессий, так как:
В Edge-среде шифрование должно быть переписано под:
crypto.subtle.encryptcrypto.subtle.decryptcrypto.subtle.importKeycrypto.subtle.exportKeyПример концептуального различия:
Node.js (упрощённо):
crypto.createCipher('aes-256-gcm', key)
Edge Runtime:
await crypto.subtle.encrypt(
{ name: "AES-GCM", iv },
cryptoKey,
data
)
Edge Runtime работает эффективнее с:
Поэтому session-объекты Iron-подхода должны быть:
Edge окружение стимулирует:
Iron-сессии идеально вписываются в модель:
Многие реализации ломаются из-за:
Buffer.fromBuffer.concatВ Edge требуется замена на:
Uint8ArrayTextEncoder / TextDecoderЧасто встречаются зависимости:
uuid (старые версии)bcryptjsonwebtoken (без edge-версии)Все они могут использовать недоступные API.
Edge Runtime часто используется в:
Важно учитывать:
Edge Runtime даёт преимущества:
Но накладывает ограничения:
Рекомендуется:
В Edge можно кэшировать:
importKeyЭто уменьшает overhead на каждом запросе.
Данные можно расшифровывать:
Типичная схема выглядит так:
Edge Runtime подходит для Iron-подхода, если:
Не подходит, если: