Edge Runtime vs Node.js Runtime Next.js-də — Hansını Seçməlisən?
Next.js layihəndə Edge yoxsa Node.js runtime seçimi performansa, qiymətə və arxitekturaya birbaşa təsir edir. Fərqi konkret izah edirik.
Edge Runtime vs Node.js Runtime Next.js-də — Fərq Nədir?
Salam, developer dostlar! Bu gün Next.js-in ən çox qarışıq salan mövzularından birinə aydınlıq gətirəcəyik: Edge Runtime və Node.js Runtime arasındakı fərq. Vercel-də deploy edəndə, yaxud müsahibədə "Edge nədir?" sualı gələndə əmin cavab verə biləsən deyə, hər şeyi praktiki şəkildə izah edəcəyik.
Əvvəlcə Kontekst: Runtime Nədir?
Next.js-də hər API route və ya server component hansısa runtime üzərində işləyir. Runtime — kodunun icra olunduğu mühitdir. Next.js sənə iki seçim verir:
- Node.js Runtime — bildiyimiz klassik Node.js mühiti. Bütün Node.js API-ləri əlçatandır.
- Edge Runtime — V8 engine üzərində işləyən, yüngül, məhdud, amma ultra-sürətli mühit. Web API-lərinə əsaslanır.
Fərqi sadə desək: Node.js Runtime bir tam mənzildir (mətbəx, yataq otağı, hamam — hər şey var). Edge Runtime isə coworking-dəki iş masasıdır — yüngül, sürətli, amma bəzi şeylər yoxdur.
Əsas Fərqlər — Cədvəllə
| Xüsusiyyət | Node.js Runtime | Edge Runtime |
|---|---|---|
| Cold start | 250-1500ms | 1-5ms |
| Maksimum icra müddəti | 60 san (Vercel Pro) | 30 san |
| Bundle ölçüsü limiti | Yoxdur | 4 MB |
| Node.js API dəstəyi | Tam (fs, path, crypto...) | Məhdud (Web API only) |
| npm paketləri | Hamısı | Yalnız Edge-compatible olanlar |
| Qlobal paylanma | Bir region | CDN kənarlarında (edge locations) |
| Database əlaqəsi | Adi TCP connection | HTTP-based connection lazımdır |
Bu rəqəmlər vacibdir. Bakıda bir e-ticarət layihəsi üzərində işləyirsənsə və istifadəçilərin əksəriyyəti Azərbaycandadırsa, cold start fərqi o qədər də kritik olmaya bilər. Amma qlobal SaaS qurursan — Edge sənin silahındır.
Kod Nümunəsi: Eyni Endpoint, İki Runtime
Gəl eyni API route-u hər iki runtime ilə yazaq:
Node.js Runtime (default)
typescript// app/api/products/route.ts import { NextResponse } from 'next/server'; import { Pool } from 'pg'; // Default olaraq Node.js runtime işləyir export const runtime = 'nodejs'; const pool = new Pool({ connectionString: process.env.DATABASE_URL, }); export async function GET() { const { rows } = await pool.query( 'SELECT id, name, price FROM products WHERE active = true LIMIT 20' ); return NextResponse.json({ products: rows, currency: 'AZN', runtime: 'nodejs', }); }
Edge Runtime
typescript// app/api/products/route.ts import { NextResponse } from 'next/server'; // Edge runtime aktivləşdiririk export const runtime = 'edge'; export async function GET() { // Edge-də klassik pg pool işləmir! // HTTP-based connection lazımdır (Neon, PlanetScale, Supabase və s.) const res = await fetch(process.env.DATABASE_HTTP_URL!, { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.DB_TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ query: 'SELECT id, name, price FROM products WHERE active = true LIMIT 20', }), }); const data = await res.json(); return NextResponse.json({ products: data.rows, currency: 'AZN', runtime: 'edge', }); }
Gördüyün kimi, yeganə dəyişiklik export const runtime = 'edge' əlavə etməkdir — amma arxitektura tamamilə dəyişir. pg paketi Edge-də işləmir, çünki TCP socket lazımdır. Ona görə Neon Serverless Driver, Supabase, yaxud PlanetScale kimi HTTP-based database adapter istifadə etməlisən.
Middleware — Həmişə Edge-dir
Bunu bilmək vacibdir: Next.js-də middleware.ts faylı həmişə Edge Runtime-da işləyir. Seçim yoxdur. Buna görə middleware-də ağır Node.js paketlərini (məsələn, bcrypt, sharp, prisma) istifadə edə bilməzsən.
typescript// middleware.ts — bu HƏMIŞƏ Edge-dir import { NextRequest, NextResponse } from 'next/server'; export function middleware(request: NextRequest) { const token = request.cookies.get('session')?.value; if (!token && request.nextUrl.pathname.startsWith('/dashboard')) { return NextResponse.redirect(new URL('/login', request.url)); } return NextResponse.next(); } export const config = { matcher: ['/dashboard/:path*'], };
Bu yanaşma Bakıdakı şirkətlərin əksəriyyətinin layihələrinə uyğundur — autentikasiya yoxlaması, locale redirect, A/B testing kimi yüngül işlər üçün Edge idealdır.
Nə Vaxt Hansını Seçməlisən?
Edge Runtime seç, əgər:
- ✅ Autentikasiya/authorization yoxlaması edirsən
- ✅ Geolocation əsaslı redirect lazımdırsa
- ✅ A/B test, feature flag kimi yüngül logika varsa
- ✅ Response vaxtı kritikdirsə (< 50ms hədəf)
- ✅ Qlobal istifadəçi bazanız varsa
Node.js Runtime seç, əgər:
- ✅ Ağır computation lazımdırsa (image processing, PDF generation)
- ✅
fs,path,child_processkimi Node.js API-ləri istifadə edirsən - ✅ Prisma ORM, Mongoose kimi TCP-based ORM istifadə edirsən
- ✅ npm paketlərinin Edge uyğunluğu yoxdursa
- ✅ Fayl sistemi ilə işləyirsənsə
Azərbaycan Konteksti: Praktiki Məsləhətlər
Bakıdakı şirkətlərin — istər PASHA Holding-in texnoloji layihələri olsun, istər kiçik startuplar, istərsə də freelance işlər — əksəriyyəti üçün Node.js Runtime default seçim olaraq qalmalıdır. Səbəblər:
-
Database seçimi: Əksər Azərbaycan layihələri PostgreSQL və ya MySQL-dən Prisma ilə istifadə edir. Prisma hələ də Edge-də tam stabil deyil (Prisma Accelerate var, amma əlavə xərcdir).
-
İstifadəçi coğrafiyası: Əgər istifadəçilərin 90%-i Azərbaycandadırsa, Frankfurt və ya İstanbul regionunda tək bir Node.js serverless function kifayət edir. Edge-in qlobal paylanma üstünlüyü burada o qədər hiss olunmur.
-
Maaş reallığı: Bakıda middle Next.js developer maaşı təxminən 1500-3000 AZN arasındadır. Edge-ə keçid üçün əlavə infrastruktur bilikləri (Neon, Drizzle ORM, HTTP-based DB) tələb olunur — bu bilikləri öyrənmək vaxt alır, amma CV-nə böyük artıdır.
-
Vercel qiymətləri: Edge Function-lar Vercel-də daha ucuzdur (Node.js: 1M invocation = $1.60, Edge: 1M = $0.65). Əgər layihən böyükdürsə, bu fərq ayda 20-30 USD qənaət edə bilər.
Hibrid Yanaşma — Ən Yaxşı Strategiya
Gözəl xəbər budur ki, bir Next.js layihəsində hər iki runtime-ı eyni anda istifadə edə bilərsən. Hər route özü üçün seçir:
typescript// app/api/auth/verify/route.ts export const runtime = 'edge'; // sürətli olmalıdır // app/api/reports/generate/route.ts export const runtime = 'nodejs'; // ağır iş görür
Bu hibrid yanaşma ən ağıllı strategiyadır. Middleware və auth yoxlamaları Edge-də, ağır business logic isə Node.js-də saxla.
Nəticə
Edge Runtime gələcəyin texnologiyasıdır, amma Node.js Runtime hələ ki əksər layihələr üçün daha praktiki seçimdir. Əsas qaydalar:
- Default olaraq Node.js istifadə et
- Performans kritik endpointləri Edge-ə keçir
- Middleware artıq Edge-dir — bunu qəbul et və yüngül saxla
- Database seçimini runtime-a görə planla
Sualın varsa, kommentlərdə yaz — Baku Stack olaraq hər zaman buradayıq. Uğurlar, developer! 🚀
Oxşar məqalələr
Vercel vs Öz Serverin — Azərbaycan Startapı üçün Xərc Analizi
Vercel-ə ayda $20 vermək yoxsa Hetzner-dən server almaq? Bakıda startap qurarkən real rəqəmlərlə hosting xərclərini müqayisə edirik.
Next.js 15 App Router — Azərbaycan Developer-ləri Üçün Tam Bələdçi
Next.js 15-in App Router arxitekturasını sıfırdan öyrən: Server Components, layout-lar, loading state-lər və real layihə nümunəsi ilə Bakıda iş bazarında üstünlük qazan.
Next.js ilə E-Government Portal: Praktiki Arxitektura Bələdçisi
Azərbaycanda e-gov layihələr artır, developer tələbat isə böyükdür. Next.js ilə real e-government portal arxitekturasını addım-addım quraq.