Edge Runtime — nima, Node.js dan farqi, qachon kerak
Muammodan boshlaylik
Serveringiz Frankfurtda. Toshkentdagi foydalanuvchi uchun har bir so'rov ~80 ms, Tokiodagi uchun ~250 ms faqat "yo'lda". Middleware har bir so'rovda ishlaydi — u sekin bo'lsa, butun sayt sekin.
Bundan tashqari, serverless funksiya uzoq vaqt chaqirilmasa — "sovuq start": Node.js ni ishga tushirish, modullarni yuklash — yuzlab millisekund.
Edge Runtime nima?
Edge Runtime — Node.js emas, balki V8 izolyatlari asosidagi yengil muhit (Cloudflare Workers, Vercel Edge kabi). Kod butun dunyo bo'ylab tarqalgan serverlarda — foydalanuvchiga eng yaqin joyda ishlaydi.
| Node.js Runtime | Edge Runtime | |
|---|---|---|
| API lar | To'liq Node.js: fs, net, child_process... |
Faqat Web standartlari: fetch, Request, crypto.subtle, TextEncoder |
| npm paketlar | Hammasi | Faqat Node API siz ishlaydiganlari |
| Sovuq start | 100–1000 ms | ~0–50 ms |
| Joylashuv | Bitta (yoki bir nechta) region | Foydalanuvchiga yaqin |
| Kod hajmi chegarasi | Katta | Kichik (bir necha MB) |
| Bajarilish vaqti | Uzoq | Qisqa |
| Ma'lumotlar bazasi (TCP) | ✅ | ❌ — faqat HTTP drayverlar |
Hayotiy o'xshatma
Katta markaziy ombor va mahallalardagi kichik kiosklar. Ombor (Node.js) — hamma narsa bor, lekin uzoqda. Kiosk (Edge) — uyingiz yonida, darhol xizmat qiladi, lekin u yerda faqat non, sut va gazeta: muzlatgich yoki mebel so'rasangiz — omborga yuborishadi.
Runtime ni tanlash
// app/api/joylashuv/route.ts
export const runtime = 'edge'
export async function GET(request: Request) {
const mamlakat = request.headers.get('x-vercel-ip-country') ?? 'noma\'lum'
return Response.json({ mamlakat })
}
export const runtime = 'nodejs' // standart
Route Handler lar, sahifalar va layout lar uchun export const runtime. Middleware — standart holatda Edge da ishlaydi.
[!INFO] Next.js 15.2+ da middleware uchun Node.js runtime ham qo'llab-quvvatlanadi (
export const config = { runtime: 'nodejs' }), Next.js 16 ningproxy.tsi esa standart holatda Node.js da ishlaydi. Bu middleware da ORM va to'liq Node API laridan foydalanish imkonini beradi — versiyangiz hujjatini tekshiring.
Edge ga mos vazifalar
✅ Yaxshi:
- Middleware — auth cookie tekshiruvi, redirect, A/B test, geolokatsiya (28-dars)
- Oddiy, tez API lar: feature flag lar, joylashuvga qarab kontent
- OG rasm generatsiyasi —
next/og(ImageResponse) - Tashqi API ga yengil proxy, javobni o'zgartirish
- Streaming javoblar (AI chat)
❌ Mos emas:
- An'anaviy ORM (Prisma standart sozlamasi, TCP ulanishli drayverlar)
fs,sharp,bcrypt(native) kabi Node.js ga bog'liq kutubxonalar- Og'ir hisob-kitob, uzoq davom etadigan ishlar
- Katta bog'liqliklar
OG rasm — Edge misoli
// app/blog/[slug]/opengraph-image.tsx
import { ImageResponse } from 'next/og'
export const runtime = 'edge'
export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'
export default async function Rasm({ params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params
const post = await fetch(`https://api.dokon.uz/postlar/${slug}`).then((r) => r.json())
return new ImageResponse(
(
<div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center',
justifyContent: 'center', background: '#0b1120', color: 'white', fontSize: 64, padding: 80 }}>
{post.sarlavha}
</div>
),
size
)
}
Har bir maqola uchun ijtimoiy tarmoqlarda chiroyli rasm — avtomatik.
Ma'lumotlar bazasi Edge da
TCP ulanish yo'q — HTTP orqali ishlaydigan drayverlar kerak:
export const runtime = 'edge'
import { neon } from '@neondatabase/serverless'
export async function GET() {
const sql = neon(process.env.DATABASE_URL!)
const natija = await sql`SELECT id, nomi FROM kategoriyalar ORDER BY nomi`
return Response.json(natija)
}
Variantlar: Neon serverless, PlanetScale, Turso, Upstash Redis, Supabase (HTTP), Drizzle bilan (49-dars).
[!WARNING] Edge funksiya foydalanuvchiga yaqin, lekin baza bitta regionda bo'lsa — Tokiodagi edge funksiya Frankfurtdagi bazaga har so'rovda boradi va hatto sekinroq bo'lishi mumkin. Bazaga ko'p murojaat qiladigan kod uchun Node.js runtime + bazaga yaqin region odatda yaxshiroq.
Qanday tanlash
Har bir so'rovda ishlaydimi va juda tez bo'lishi kerakmi? (middleware)
└── Ha → Edge
Baza bilan ko'p ishlaydimi yoki Node kutubxonalari kerakmi?
└── Ha → Node.js (bazaga yaqin regionda)
Oddiy, mustaqil, global auditoriya uchun?
└── Edge
Shubha bo'lsa → Node.js (standart)
[!TIP] Vercel da Node.js funksiyalari ham endi tez sovuq start va bir nechta region bilan ishlaydi (Fluid compute). Ko'p loyihalar uchun Edge ga ataylab o'tish shart emas — faqat aniq foyda bo'lganda.
Tez-tez uchraydigan xatolar
1. Edge da Node modulini import qilish
Module not found: Can't resolve 'fs'
The edge runtime does not support Node.js 'crypto' module
Web standart muqobil: crypto.subtle, fetch; yoki runtime = 'nodejs'.
2. Middleware da Prisma
Edge da ishlamaydi (42-dars) — bazasiz auth.config.ts.
3. "Edge = har doim tezroq"
Baza uzoqda bo'lsa — aksincha.
Xulosa
Edge — V8 izolyatlari, foydalanuvchiga yaqin, sovuq start deyarli yo'q
Faqat Web API lar: fetch, Request, crypto.subtle; fs, TCP, native modullar yo'q
export const runtime = 'edge' | 'nodejs' (standart)
Mos: middleware, OG rasm, geolokatsiya, yengil API, streaming
Baza — HTTP drayverlar; bazadan uzoq edge — sekin
Shubha bo'lsa — Node.js
Keyingi bo'lim
61-dars: Vitest — Next.js bilan sozlash
Testing bo'limi: Next.js loyihasida tez unit va komponent testlari.